Jump to content
PLC Forum


Fc In Scl, Problema Parametri


aleb2
 Share

Recommended Posts

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 to comment
Share on other sites


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 to comment
Share on other sites

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 to comment
Share on other sites

#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 to comment
Share on other sites

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?

Edited by batta
Link to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...