Daten durch Filtern von Bits über eine festgelegte Zeit entprellen
Dieser FP-Befehl führt eine Signalentprellung festgelegter Bit aus. Dadurch wird sichergestellt, dass deren Signal über einen bestimmten Zeitraum stabil ist. Dies ist sinnvoll, wenn mechanische Taster oder Schalter an schnellen Eingängen betrieben werden.
Eingang
Eingangsdaten, deren Bits entsprechend der Maske gefiltert werden
Eingangsmaske, die festlegt, welche Bits zur Entprellung gefiltert werden
Zeitraum in ms, in dem das Signal an den angegebenen Bits stabil sein muss
Ausgang
Gefilterte Daten
wenn die Signalentprellungszeit in s3_Time kleiner als 0 oder größer als 30000 ist
wenn die Signalentprellungszeit in s3_Time kleiner als 0 oder größer als 30000 ist
Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden. Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.
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
Wenn bStart auf TRUE gesetzt ist, werden die Bits der s1_In zugeordneten Daten wie folgt ausgegeben: Die geprellten Bits werden erst in die Variable wOutputData geschrieben, wenn die Filterzeit abgelaufen ist. In den time charts finden Sie eine genaue Erläuterung.
Die Bits, die in der auf n_Bits angewendeten Datenmaske nicht gesetzt sind, werden direkt ohne Bedingungen ausgegeben.
Die Bits, die in der auf n_Bits angewendeten Datenmaske gesetzt sind, werden ausgegeben, nachdem ihr Signal für den durch s3_Time in ms festgelegten Zeitraum stabil war.
wOutputdata hat den Wert 16#A9B0 für 100ms. Nach Ablauf dieser Zeit hat wOutputData den Wert 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;