Computo ore funzionamento dispositivi con FB TimeBalancing
Home › Forum › Programmazione IEC 61131 (LogicLab) › Computo ore funzionamento dispositivi con FB TimeBalancing
- Questo topic ha 4 risposte, 1 partecipante ed è stato aggiornato l'ultima volta 1 giorno, 3 ore fa da
Sergio Bertana.
-
AutorePost
-
Maggio 5, 2025 alle 2:06 pm #81859
Anonimo
InattivoStò utilizzando il FB TimeBalancing per il controllo di 3 pompe, avrei la necessità di conteggiare le ore di funzionamento delle pompe anche su comando esterno, non solo dalle richieste in DRequest.
Pensavo di utilizzare un ingresso digitale per ogni pompa connesso al relativo teleruttore di comando per il conteggio delle ore di funzionamento, è possibile farlo? e se si come?
Maggio 5, 2025 alle 2:37 pm #81865Sergio Bertana
Amministratore del forumLa funzione principale del FB TimeBalancing è il comando di dispositivi in base alle ore di funzionamento, settando il numero di bits in DRequest in base al numero di dispositivi da comandare il FB comanda i dispositivi con meno ore attivando i relativi bits in DCommand.
Ma settando i bits in DForce è possibile comandare il relativo dispositivo, indipendentemente dalle sue ore di funzionamento. Alla attivazione di un bit in DForce se il relativo bit in DEnable è attivo il relativo bit in DCommand si attiva. In questo modo è possibile gestire il comando manuale dei dispositivi. Le ore di funzionamento del dispositivo sono conteggiate anche sul comando manuale.
Quindi venendo alla tua necesità, non vedo perchè tu debba utilizzare ulteriori ingressi logici per leggere lo stato del contatore, quando puoi semplicemente gestire i bits in DForce per il comando delle pompe in manuale.
Ma se proprio vuoi prenderti questa “rogna” ti basterà realizzare un programma che sull’attivazione del relativo ingresso logico ad ogni secondo esegue l’incremento del valore del tempo nell’array definito in DWTime alla posizione relativa al dispositivo.
Maggio 5, 2025 alle 4:10 pm #81896Sergio Bertana
Amministratore del forumAggiungo due esempi di programma per l’aggiornamento del tempo di lavoro dispositivi.
Il primo esempio è più intuitivo ma “paga” l’errore del campionamento sul tempo di loop. In pratica ad ogni secondo si perde il tempo che trascorre tra il passaggio del secondo e quando il programma lo controlla
VAR DOn : ARRAY[0..2] OF BOOL; (* Device attivo *) TTrig : R_TRIG; (* Time trigger *) END_VAR TTrig(CLK:=SysClock1000); //Time trigger IF NOT(TTrig.Q) THEN RETURN; END_IF; // Calcolo tempo dispositivi. IF (DOn[0]) THEN DWTime[0]:=DWTime[0]+1; END_IF; IF (DOn[1]) THEN DWTime[1]:=DWTime[1]+1; END_IF; IF (DOn[2]) THEN DWTime[2]:=DWTime[2]+1; END_IF;
Il secondo esempio calcola il tempo senza errori.
VAR DOn : ARRAY[0..2] OF BOOL; (* Device attivo *) SysTimeMs : UDINT; (* System time (mS) *) TimeDelay : UDINT; (* Time delay (mS) *) TimeBf : UDINT; (* Time buffer (mS) *) END_VAR // Eseguo inizializzazione. IF (SysFirstLoop) THEN TimeBf:=SysTimeGetMs(); //Time buffer (mS) END_IF; // Gestione base tempi. SysTimeMs:=SysTimeGetMs(); //System time (mS) TimeDelay:=SysTimeMs-TimeBf; //Time delay (mS) IF (TimeDelay < 1000) THEN RETURN; END_IF; TimeBf:=SysTimeMs-(TimeDelay-1000); //Time buffer (mS) // Calcolo tempo dispositivi. IF (DOn[0]) THEN DWTime[0]:=DWTime[0]+1; END_IF; IF (DOn[1]) THEN DWTime[1]:=DWTime[1]+1; END_IF; IF (DOn[2]) THEN DWTime[2]:=DWTime[2]+1; END_IF;
Maggio 8, 2025 alle 10:04 am #82158Anonimo
InattivoNella pratica può succedere che una pompa venga spenta sul posto con un selettore automatico/manuale (AUT, con gestione da PLC; MAN con funzionamento diretto).
In questo caso ad esempio, prima che il personale si accorga del guasto o prima di rimettere in funzionamento automatico la pompa in fermata il contaore continua erroneamente a contare. Questo inficia il bilanciamento delle ore di lavoro. Con un ritorno dal contattore (teleruttore) ho la certezza dell’esatto conteggio orario.
Comunque gli esempi sono chiari.
Maggio 8, 2025 alle 10:09 am #82161Sergio Bertana
Amministratore del forumQuindi con selettore in AUT dovrai abilitare il relativo bit in DEnable così da permettere al FB di gestire la pompa in base alla richiesta.
Con il selettore in MAN dovrai disabilitare il relativo bit in DEnable così da impedire al FB di gestire la pompa. E poi dovrai gestire l’incremento del tempo utilizzando l’ingresso che indica lo stato di contatore attivo.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.