Vai al contenuto
PLC Forum


Fc In Scl, Problema Parametri


aleb2

Messaggi consigliati

Ho una variabile dichiarata come array [1..360] of Struct, composta da un valore Real e da un bool; volevo creare una FC che facesse la media dei valori Real, ma con la variabile Array non sembra funzioni il ciclo FOR per fare la somma, c'è qualcosa che mi sfugge;

p.s non volevo usare i puntatori

Link al commento
Condividi su altri siti


non è il codice il problema; dovendo fare una somma tra gli elementi dell'array, non ho capito come far incrementare l'indice dell'array per fare la somma usando il ciclo for

Link al commento
Condividi su altri siti

Livio Orsini

Usa uno degli accumulatori come puntatore; lo carichi prima di iniziare il ciclo di "for". Al termine del ciclo, prima della ripetizione incrementi l'accumulatore che hai usato come puntatore.

Link al commento
Condividi su altri siti

#SOMMA:=0;

FOR #I:= 1 TO 360 DO

IF (#DATO_EL[#I].VALIDO=1) THEN

#SOMMA:=#DATO_EL[#I].VALORE+#SOMMA;

#MEDIA_ORARIA:=#SOMMA/360;

END_IF;

END_FOR;

DATO_EL Array [1..360] of Struct

Output

MEDIA_ORARIA Real

InOut

J Int

Temp

SOMMA Real ...

I Int ...

Return

Ret_Val Void

Il mio problema e` come passare il parametro attuale a #DATO_EL

Link al commento
Condividi su altri siti

ma con la variabile Array non sembra funzioni il ciclo FOR per fare la somma

Il mio problema e` come passare il parametro attuale a #DATO_EL

Mi pare che tu stia dicendo due cose completamente diverse.

A questo punto, non capisco più quale sia il tuo problema.

Non mi stancherò mai di ripeterlo: punto fondamentale per poter avere risposte chiare, è porre domande chiare.

Se la domanda riguarda come collegare il parametro "DATO_EL" alla FC, la risposta è che devi collegare un array identico a quello dichiarato all'interno della FC.

Per fare questo, credo si possa usare solo il simbolico.

Per esempio, se hai creato un DB chiamato DB_Media, all'interno del quale c'è un ARRAY di nome "DATO" (che deve essere composto da 360 STRUCT formate da una variabile BOOL e una REAL), la sintassi da usare è: "DB_Media".DATO

Io ho fatto una prova e, come era facile supporre, funziona.

Nel tuo codice però ci sono alcune cose che non capisco:

1) perché ci sono tutti quei caratteri "#" ?

2) la dichiarazione delle variabili è incompleta. Cosa ti costava fare un copia/incolla completo delle dichiarazioni delle variabili?

Modificato: da batta
Link al commento
Condividi su altri siti

i dati con # sono i parametri formali dellFC;

Pensavo anch io ma quando vado a passare il parametro attuale richiamando l`FC ,non accetta DBX.DATO_ELEMENTARE dove dato elementare e` una variabile ARRAY[1..360] of Struct identica

Link al commento
Condividi su altri siti

i dati con # sono i parametri formali dellFC;

Ok, stai usando TIA Portal. Magari scriverlo non sarebbe stata una cattiva idea.

Te l'avevo chiesto perché in Step7 in scl non viene usato il #.

non accetta DBX.DATO_ELEMENTARE

A me lo accetta, sia scrivendo DBxxx.NomeVariabile, sia scrivendo "NomeDB".NomeVariabile

Devi solo cancellare le paretesi []

Link al commento
Condividi su altri siti

Due piccole note:

1) la riga di codice

IF (#DATO_EL[#I].VALIDO=1) THEN

può diventare

IF #DATO_EL[#I].VALIDO THEN

2) creando una struttura con una variabile BOOL e una REAL, vengono usati 6 byte. Tutto dipende ovviamente da come vai a scrivere i valori nel tuo array di variabili STRUCT, ma potresti anche gestire due array distinti, uno per le variabili BOOL e uno per le variabili REAL.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...