Vai al contenuto

Computo ore funzionamento dispositivi con FB TimeBalancing

Home Forum Programmazione IEC 61131 (LogicLab) Computo ore funzionamento dispositivi con FB TimeBalancing

Stai visualizzando 5 post - dal 1 a 5 (di 5 totali)
  • Autore
    Post
  • #81859
    Anonimo
    Inattivo

    Stò 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?

    #81865
    Sergio Bertana
    Amministratore del forum

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

    #81896
    Sergio Bertana
    Amministratore del forum

    Aggiungo 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;
    #82158
    Anonimo
    Inattivo

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

    #82161
    Sergio Bertana
    Amministratore del forum

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

Stai visualizzando 5 post - dal 1 a 5 (di 5 totali)
  • Devi essere connesso per rispondere a questo topic.