Qualunque dispositivo elettromeccanico (Pulsante, finecorsa, ecc) è costituito da lamelle che si toccano a dispositivo attivato e si discostano a dispositivo rilasciato. Al momento della attivazione/disattivazione le lamelle non si stabilizzano subito nella posizione voluta ma si ha un fenomeno transitorio di tipo oscillatorio chiamato microrimbalzo. Gl ingressi digitali dei nostri dispositivi hanno già integrata una funzione di debouncing (Circa 5 mS) ma può essere utile in alcuni casi inserire un ulteriore tempo.
In questo FB è possibile definire in OnDelay ed in OffDelay i tempi di attesa stabilizzazione del segnale In in ingresso prima di trasferirne lo stato sul segnale Out in uscita.
Descrizione
In (BOOL) Segnale su cui eseguire l’antirimbalzo.
OffDelay (REAL) Tempo di attesa (S) su disattivazione segnale in ingresso prima di eseguire disattivazione del segnale in uscita.
OnDelay (REAL) Tempo di attesa (S) su attivazione segnale in ingresso prima di eseguire attivazione del segnale in uscita.
Out (BOOL) Segnale in uscita dopo l’antirimbalzo.

Esempi
Come utilizzare gli esempi.
Attivando da debug la variabile Command, Status si attiverà dopo il tempo definito in OnDelay. Disattivando da debug la variabile Command, Status si disattiverà dopo il tempo definito in OffDelay.
LogicLab (Ptp114, ST_Debouncing)
PROGRAM ST_Debouncing
VAR
Command : BOOL; (* Command *)
Status : BOOL; (* Status *)
Dbc : Debouncing; (* Signal debounce *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_Debouncing"
// *****************************************************************************
// It's managed a debounce of a logic signal.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// Program initializations.
IF (SysFirstLoop) THEN
Dbc.OffDelay:=2.0; //Off time delay (S)
Dbc.OnDelay:=5.0; //On time delay (S)
END_IF;
// -------------------------------------------------------------------------
// LOGIC SIGNAL DEBOUNCE
// -------------------------------------------------------------------------
// Logic signal debounce.
Dbc.In:=Command; //Input command
Dbc(); //Signal debounce
Status:=Dbc.Out; //Status
// [End of file]