Vai al contenuto

TimeBalancing, ottimizzazione tempo di funzionamento

Vai all indice del manuale di programmazione
Tipo: Blocco Funzione
Libreria LogicLab: eLLabUtyLib
Libreria Codesys: Non disponibile

Ottimizzare il tempo di funzionamento dei dispositivi è un obiettivo fondamentale nell’industria per migliorare l’efficienza, la durata e la sicurezza degli impianti. Alternando il funzionamento dei dispositivi in base al loro tempo di lavoro si evita che un singolo dispositivo sia sottoposto a un’usura eccessiva prolungandone la vita.

Approfondimenti
  • In questo topic chiarimenti sull’utilizzo del FB
  • In questo topic un esempio con macro per visualizzare il tempo di funzionamento su un pannello operatore.

Descrizione

DNumber (UDINT) Numero dispositivi da bilanciare (Range 1-32).
DEnable (DWORD) Ogni bit abilita la gestione del relativo dispositivo in DCommand. L’abilitazione è gestita sia il comando manuale in DForce che la richiesta in DRequest.
DForce (DWORD) Ogni bit forza il comando (In manuale) del relativo dispositivo in DCommand.
DRequest (DWORD) Ogni bit esegue la richiesta di un dispositivo. E’ possibile richiedere più dispositivi contemporaneamente. I dispositivi richiesti verranno comandati in base al tempo di lavoro e ad eventuali comandi di forzatura attivi.
DWTime (PVOID) Occorre fornire l’indirizzo di allocazione di un array di UDINT dove li FB gestirà il tempo di lavoro del dispositivo in secondi, il conteggio ha valore massimo di 136 anni. Il numero di elementi dell’array deve corrispondere al numero di dispositivi in DNumber.
Fault (BOOL) Attivo per un loop se errore esecuzione.
UResourced (BOOL) Si attiva se il numero di dispositivi richiesti supera il numero di dispositivi abilitati.
DCommand (DWORD) Ogni bit comanda il relativo dispositivo.

Immagine FB TimeBalancing

Esempi

Come utilizzare gli esempi
Nel programma di esempio è gestito l’intervento di 3 pompe connesse da una condotta idrica per l’alimentazione di un serbatoio. Ad ogni richiesta di acqua vengono avviate 2 pompe simultaneamente scegliendo tra le 2 che hanno meno ore di lavoro.

Da notare la variabile DWTime che è un array di 3 UDINT allocata nell’area DB100.2048 che è un’area ritentiva per memorizzare il tempo di funzionamento delle pompe. Ai bits di DEnable è possibile connettere le eventuali protezioni termiche delle pompe per evitarne l’avvio in caso di problemi.Se non sono disponibili almeno 2 pompe se ne attiverà una sola e si attiva l’uscita UResourced. Con DForce è possibile comandare manulamente le pompe.

Alimentazione serbatoio con 3 pompe
LogicLab (Ptp114, ST_TimeBalancing)
PROGRAM ST_TimeBalancing
VAR
    WaterRequest : BOOL; (* Water request sensor *)
    DEnable : ARRAY[0..2] OF BOOL := [TRUE, TRUE, TRUE]; (* Device enable *)
    DForce : ARRAY[0..2] OF BOOL; (* Device force *)
    DCommand : ARRAY[0..2] OF BOOL; (* Device command *)
    DWTime AT %MX100.2048 : ARRAY[0..2] OF UDINT; (* Device work time (S) (Must be RETAIN) *)
    PBalance : TimeBalancing; (* Pump time balancing *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_TimeBalancing"
// *****************************************************************************
// In this program, three pumps are managed. When water is requested, two pumps
// are simultaneously activated. To balance the pumps working time, the pumps
// with the lowest working hours are started with each request. If a pump's
// thermal overload trips, the pump is excluded from the request.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // Variable initialization.

    IF (SysFirstLoop) THEN
        PBalance.DNumber:=SIZEOF(DWTime)/SIZEOF(DWTime[0]); //Device number
        PBalance.DWTime:=ADR(DWTime); //Device work time
        PBalance.TILock:=T#1s; //Interlock time
    END_IF;

    // -------------------------------------------------------------------------
    // INPUT COMMANDS
    // -------------------------------------------------------------------------
    // Pump's thermal overload managing.

    PBalance.DEnable.0:=DEnable[0]; //Pump 1 thermal overload
    PBalance.DEnable.1:=DEnable[1]; //Pump 2 thermal overload
    PBalance.DEnable.2:=DEnable[2]; //Pump 3 thermal overload

    // Pump's manual start command.

    PBalance.DForce.0:=DForce[0]; //Pump 1 manual start
    PBalance.DForce.1:=DForce[1]; //Pump 2 manual start
    PBalance.DForce.2:=DForce[2]; //Pump 3 manual start

    // Water request managing.
    // Two pumps are simultaneously requested.

    PBalance.DRequest.0:=WaterRequest; //Device request
    PBalance.DRequest.1:=WaterRequest; //Device request

    // -------------------------------------------------------------------------
    // TIME BALANCING
    // -------------------------------------------------------------------------
    // Pump balancing managing.

    PBalance(); //Pump time balancing

    // Pump's output command.

    DCommand[0]:=PBalance.DCommand.0; //Pump 1 command
    DCommand[1]:=PBalance.DCommand.1; //Pump 2 command
    DCommand[2]:=PBalance.DCommand.2; //Pump 3 command

// [End of file]
Was this article helpful?