Debounce dei dati tramite filtraggio dei bit per un determinato periodo
Questa istruzione FP svolge l’esecuzione del filtro per i bit specificati per assicurare che il segnale sia stabile per un tempo specifico. L’istruzione può essere utile per negare gli effetti del rimbalzo, ad esempio per un interruttore.
Ingresso
Dati di ingresso i cui bit verranno filtrati in base alla maschera di ingresso
Maschera di ingresso che specifica quali bit verranno filtrati
Specifica il tempo in ms durante il quale il segnale sui bit specificati deve essere stabile
Uscita
Dati filtrati
Se il tempo di esecuzione del filtro specificato da s3_Time è inferiore a 0 o superiore a 30000.
Se il tempo di esecuzione del filtro specificato da s3_Time è inferiore a 0 o superiore a 30000.
Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU. La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.
VAR
bStart: BOOL:=FALSE;
wInputData: WORD:=16#A9BC;
wInputMask: WORD:=16#000C;
(*2#0000000000001100 i.e. bits 2 and 3 filtered*)
wOutputData: WORD:=0;
iFilterTime: INT:=100;
(*0.1 seconds*)
END_VAR
Se bStart è TRUE, i bit dei dati applicati a s1_In vengono emessi nel seguente modo: I bit filtrati vengono scritti solo su wOutputData una volta trascorso il tempo del filtro. Vedere Diagramma tempi per la spiegazione dettagliata.
I bit non impostati nei dati della maschera ingresso applicati a n_Bits vengono emessi direttamente senza condizioni.
I bit impostati nei dati della maschera ingresso applicati a n_Bits vengono emessi dopo che il loro segnale è rimasto stabile per il periodo specificato da s3_Time in ms.
wOutputdata ha il valore 16#A9B0 per 100ms, quando questo periodo è trascorso wOutputData presenta il valore 16#A9BC.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_VARIN,,wInputData,10,2,12,4,);
B(B_VARIN,,wInputMask,10,3,12,5,);
B(B_VARIN,,iFilterTime,10,4,12,6,);
B(B_CONTACT,,bStart,4,1,6,3,);
B(B_F,FP_DEBOUNCE!,,12,0,20,6,,?DEN?Ds1_In?Dn_Bits?Ds3_Time?AENO?Cd);
B(B_VAROUT,,wOutputData,20,2,22,4,);
L(1,2,4,2);
L(6,2,12,2);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
If (bStart) then
FP_DEBOUNCE(s1_In := wInputData,
n_Bits := wInputMask,
s3_Time := iFilterTime,
d => wOutputData);
End_if;