Vai al contenuto
PLC Forum


Fc In Scl, Problema Parametri


Messaggi consigliati

Inserito:

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


Inserita:

Magari l'errore è nel codice.

Ma se non alleghi il codice...

Inserita:

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

Livio Orsini
Inserita:

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.

Inserita:

#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

Livio Orsini
Inserita:

Non mi ero accorto che la richiesta era relativa a SCL

Inserita: (modificato)
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
Inserita:

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

Inserita:
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 []

Inserita:

Cavoli! con il TIA ogni tanto succedono di queste cose...grazie :thumb_yello:

Inserita:

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.

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...