Come mantenere in backup il valore di un counter
Home › Forum › Controllori SlimLine e Netsyst (LogicLab) › Come mantenere in backup il valore di un counter
- Questo topic ha 5 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 12 anni, 2 mesi fa da
Sergio Bertana.
-
AutorePost
-
Agosto 31, 2013 alle 6:07 am #35401
Alessandro
PartecipanteVolevo chiedere una cosa, forse scontata, sui Counter CTU dello SlimLine. Come è possibile mantenere il valore di CTU.CV memorizzato in modo da mantenerlo se spengo e accendo la macchina ?
Ho fatto un pò di prove, ma senza risultato, ogni volta che spengo e riaccendo mi resetta a 0 il CTU.CV.
Agosto 31, 2013 alle 6:13 am #37738Sergio Bertana
Amministratore del forumSe usi il blocco funzione CTU, Counter Up per gestire il counter non puoi mantenere in backup il valore di conteggio CV. Esiste una soluzione molto semplice per realizzare contatori che mantengono il loro valore di conteggio allo spegnimento, basta utilizzare l’operando ADD, ecco un semplice ramo ladder che ne mostra l’uso.
In pratica viene abilitato l’operando ADD sul fronte di attivazione di un ingresso digitale tramite l’operando -]P[-, ad ogni fronte di attivazione viene sommato 1 al valore della variabile Counter ed il risultato è salvato nella variabile Counter. Basterà definire la variabile con l’attributo RETAIN oppure allocarla nella memoria ritentiva (A partire da DB 100.2048) per mantenere il valore memorizzato allo spegnimento, allego un progetto per il download.
Agosto 31, 2013 alle 6:29 am #37739Sergio Bertana
Amministratore del forumAggiungo ricordando che di questi rami è possibile farne tutti quelli che si necessitano, in questo post un esempio di più contatori con acquisizione del loro valore da Modbus.
Settembre 2, 2013 alle 9:31 am #37743Alessandro
PartecipanteGrazie mille…. però questo è un workaround, Ok, modifico il programma.
Se io volessi utilizzare CTU, usando una variabile di appoggio di backup, posso caricare il valore della variabile di appoggi in CTU.CV al primo loop ? Che funzione/sistema uso per gestire il primo loop ?
Settembre 2, 2013 alle 9:37 am #37744Sergio Bertana
Amministratore del forumIl blocco funzione CTU è stato fatto in accordo alle specifiche della IEC61131, ma è sicuramente possibile modificarlo per ottenere quello che si desidera. Il blocco funzione CTU è realizzato in ST ecco il codice sorgente.
IF (CU AND NOT CUMemo) THEN
IF (CV < PV) THEN CV:=CV+1; END_IF;
END_IF;CUMemo:=CU; (* CU status memo *)
IF R THEN CV:=0; END_IF; (* Reset command *)
Q:=(CV >= PV); (* Output management *)In merito alla tua domanda, non è possibile in nessun modo presettare il valore di CTU.CV in quanto si tratta di una variabile di uscita dal FB.
Settembre 2, 2013 alle 9:42 am #37745Sergio Bertana
Amministratore del forumA scopo didattico ecco il sorgente ST di un nuovo FB che prevede anche il preset, l’ho chiamato CTUPreset.
IF (CU AND NOT CUMemo) THEN
IF (CV < PV) THEN CV:=CV+1; END_IF;
END_IF;CUMemo:=CU; (* CU status memo *)
IF P THEN CV:=Preset; END_IF; (* Preset command *)
IF R THEN CV:=0; END_IF; (* Reset command *)
Q:=(CV >= PV); (* Output management *)Come vedi ho aggiunto due ingressi P (BOOL) e Preset (UDINT) che permettono su comando di presettare il valore in uscita. Inoltre già che ho modificato ho anche modificato le variabili di conteggio in UDINT, in questo modo il counter può contare fino a 4294967295.
Allego stampa e progetto sorgente, come vedi nel programma LD al primo loop forzo il preset del CTU con la variabile Pieces che è anche la variabile valorizzata con il valore CV del CTU. Naturalmente questa variabile andrà allocata in una zona RETAIN.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.