Come utilizzare il FB Average
Home › Forum › Programmazione IEC 61131 (LogicLab) › Come utilizzare il FB Average
- Questo topic ha 5 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 2 anni, 2 mesi fa da
Sergio Bertana.
-
AutorePost
-
Dicembre 23, 2019 alle 5:48 pm #52155
Stefano
PartecipanteHo un sistema che acquisisce una tempera tramite PT100 (collegata direttamente al modulo acquisizione analogico serie slimline), l’uscita poi va su un blocco Average con coefficiente di 100.
Il sistema si stabilizza sui 230°C e viene mantenuto da un riscaldatore pilotato in PWM con un periodo di 2 secondi. Mi sono accorto che mentre il riscaldatore è fisicamente acceso la temperatura salta su di mezzo grado, appena si spegne torna giù di mezzo grado. Quindi continua a variare così con un periodo di 2 secondi.
Ho provato ad aumentare progressivamente il coefficiente fino ad arrivare a 300 ma vedo che la situazione non cambia di molto. Posso provare ad aumentarlo ancora ma non vorrei che poi la risposta fosse troppo lenta. Diciamo che non ho ancora ben chiaro come funzioni il coefficiente in questione.
Dicembre 23, 2019 alle 5:58 pm #52158Sergio Bertana
Amministratore del forumIl FB Average esegue una integrazione del valore in ingresso utilizzando il coefficente impostato, il comportamento è molto simile a quello ottenuto analogicamente da una rete RC.
Per comprenderne bene il funzionamento ti consiglio di realizzare un semplice progetto con acquisizione analogica e visualizzare sia il valore in ingresso che in uscita al FB tramite la funzione oscilloscopio di LogicLab. In questo modo puoi vedere graficamente la risposta in uscita al variare del segnale in ingresso.
Ma venendo alla tua domanda è molto strano quello che succede, hai verificato in debug come è l’andamento del valore di temperatura in uscita al FB SysGetAnInp?
Se il valore è corretto, dovresti vedere il valore di temperatura con le cifre decimali (e magari anche la cifra delle unità) che continuano a variare e se così è e se la acquisizione con la SysGetAnInp è effettuata in task Back puoi mettere coefficente anche di 1000 e più. Dovresti vedere in uscita alla FB le cifre decimali quasi stabili.
Gennaio 30, 2021 alle 3:59 pm #58911Rubox
PartecipanteC’è un modo per “azzerare” il valore medio del FB Average?
Lancio un’acquisizione di un’ora di un ingresso e lo passo ad Average. Quando lancio un’altra acquisizione dello stesso ingresso vorrei poter ripartire con un valore medio nuovo.
Gennaio 30, 2021 alle 4:01 pm #58916Sergio Bertana
Amministratore del forumSettando il valore di Coefficent a “0” l’uscita Average assume valore di Value.
Dopodichè settando il valore di Coefficent corretto si riprende ad eseguire la media.
Febbraio 8, 2023 alle 2:33 pm #70008Stefano
PartecipanteQuesto è il mio codice di acquisizione di una temperatura:
PROGRAM MyProgram VAR ALR_SENS_HEATER : BOOL; (* Sensor alarm *) AN_TEMP_HEATER : REAL; (* Temperature (°C) *) ANA_IN_2 : SysGetAnInp; (* Analog inout acquisition *) AV_IN_2 : Average; (* Temperature average *) END_VAR ANA_IN_2(Address:=3, Channel:=1, Mode:=AD_PT100_DIFFER); IF ANA_IN_2.Fault THEN ALR_SENS_HEATER:=TRUE; //Sensor alarm ELSIF ANA_IN_2.Done THEN AV_IN_2(Value:=ANA_IN_2.Value,Coefficient:=125.0); AN_TEMP_HEATER:=AV_IN_2.Average; //Temperature (°C) END_IF; // [End of file]
Oggi c’è stato un problema elettrico sulla PT100. Probabilmente il blocco di acquisizione analogica ha restituito qualche valore spropositatamente alto. L’errore ha comunque attivato l’uscita Fault, la cosa è gestita quindi l’operatore veniva informato del problema. La manutenzione ha sistemato il problema elettrico senza riavviare l’impianto. La segnalazione d’errore era rientrata, quindi l’operatore non vedeva guasti, ma dopo più di un ora la temperatura indicata era di 180°C, con trend in calo, contro la temperatura reale della sonda attorno ai 22 °C. Questo mi fa pensare che il blocco Average fosse semplicemente “sporco”.
La mia idea sarebbe di appoggiare “Coefficient” ad una variabile che viene settata a zero quando il blocco SysGetAnInp è in “Fault” e riportata al valore corretto alla fine del codice eseguito quando il blocco segnala “Done”. Così mi assicuro che alla prima lettura venga “ripulito” il blocco Average.
In una situazione simile, quindi ripristino della sonda da guasto, potrebbe essere necessario anche una sorta di reset del blocco SysGetAnInp ? O magari un reset fisico dell’hardware PCB126C110?
Febbraio 9, 2023 alle 8:35 am #70025Sergio Bertana
Amministratore del forumIl FB Average per calcolare il valore mediato sul valore di ingresso utilizza al suo interno una variabile di appoggio che simula il comportamento di una grossa capacità. Sicuramente nel momento in cui il valore di ingresso ha raggiunto valori molto alti per un certo tempo ha “caricato” la “capacità” interna del FB che poi alla ricomparsa del valore corretto impiegherà un certo tempo per “scaricarsi”.
Il modulo di acquisizione analogica su errore acquisizione (Esempio rottura sonda) oltre a generare errore, ritorna come valore REAL lo stato NaN acronimo di Not a Number. Non sò che versione hai tu del FB Average (Tasto destro sul FB puoi visualizzarne le proprietà), dalla versione Sfr054d160 è stato introdotto il controllo sul valore di ingresso se NaN o INF viene azzerato il valore della “capacità”. Da quello che dici sembrerebbe che tu stai utilizzando una versione precedente.
Comunque come dici giustamente tu se si azzera il valore di Coefficent il FB copia immediatamene il valore in ingresso sulla “capacità” interna e quindi in uscita. Quindi è corretto su Fault acquisizione azzerare Coefficent, ma affinchè abbia effetto devi anche eseguire il FB, nel tuo programma su errore non viene più eseguito. Ecco come potresti modificarlo.
IF ANA_IN_2.Fault THEN ALR_SENS_HEATER:=TRUE; //Sensor alarm AV_IN_2.Coefficient:=0.0; ELSIF ANA_IN_2.Done THEN AV_IN_2(Value:=ANA_IN_2.Value); AV_IN_2.Coefficient:=125.0; AN_TEMP_HEATER:=AV_IN_2.Average; //Temperature (°C) END_IF;
Non occorre invece fare alcuna operazione sul modulo analogico che provvede a ripristinare il funzionamento alla soluzione del guasto.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.