Home › Forum › Programmazione IEC 61131 (LogicLab) › Contatore ore di funzionamento
- Questo topic ha 2 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 3 anni, 9 mesi fa da Sergio Bertana.
-
AutorePost
-
Novembre 30, 2020 alle 8:23 am #58362Fabio RomaniPartecipante
Stò cercando di realizzare un FB che conteggi le ore ed i minuti di lavoro delle piastre ozono, e poi mi restitusca un alert per sostituzione dopo 100 ore di lavoro. Il problema e’ nella variabile ritentiva che non si dovrà mai resettare tipo “Timer Vita”.
Ho scaricato il progetto RetainCounter da questo topic, ma ogni volta che spengo e riaccendo il sistema la variabile si resetta, invio il programma al Vs supporto tecnico, potete controllarlo cortesemente.
Novembre 30, 2020 alle 8:33 am #58365Sergio BertanaAmministratore del forumEcco lo screenshot del programma ricevuto, hai seguito la parte di esempio in linguaggio FBD dove hai passato correttamente l’indirizzo della variabile Valore al tuo FB di conteggio, ma poi ti sei perso nello sviluppo della FB. Nella mia FB eseguo questo calcolo
@Value:=@Value+1;
Mentre tu nel tuo esegui questo calcolo
Secondi:=Secondi+1; @Minuti:=Secondi/60;
Ma la variabile Secondi non è ritentiva, e se tu ne copi il valore in quella ritentiva alla accensione avrai la variabile ritentiva che contiene il valore allo spegnimento ma la variabile Secondi sarà azzerata e quindi copiandone il valore in quella ritentiva azzererai anche lei.
Novembre 30, 2020 alle 9:09 am #58366Sergio BertanaAmministratore del forumCredo possa essere di esempio realizzare un semplice FB che gestisce il conteggio del tempo di funzionamento. Basterà definire una variabile UDINT in memoria ritentiva (DB100 da 2048 a 4095) per ogni contatore che si vuole gestire e passarne l’indirizzo al FB HourCounter che lo gestirà. Riporto il codice sorgente del FB.
// ------------------------------------------------------------------------- // GESTIONE CONTAORE // ------------------------------------------------------------------------- // Eseguo conteggio in secondi, valore massimo 4294967295 secondi pari ad // oltre 130 anni. IF (SysClock1000 <> Clk) THEN Clk:=SysClock1000; //Counter clock @HCValue:=@HCValue+1; //Hourcounter value END_IF; // Genero in uscita il valore in ore, minuti, secondi. Hours:=@HCValue/3600; //Hours Minutes:=TO_USINT((@HCValue/60) MOD 60); //Minutes Seconds:=TO_USINT(@HCValue MOD 60); //Seconds
Allego il progetto HourCounter per il download.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.