一定時間のビットのフィルタによるデータのデバウンス
このFP命令は、指定したビットについてフィルタ処理を行い、ビットの信号を一定時間安定させます。この命令は、スイッチのバウンスの影響を無効にする場合などに利用することができます。
入力
入力マスクに従ってビットをフィルタ処理する入力データ
どのビットをフィルタするかを指定する入力マスク
指定したビットの信号を安定させる時間をミリ秒単位で指定
出力
フィルタ後のデータ
s2_InputMask = 1 (16#0001)の場合、ビット0はフィルタ処理され、それ以外のビットはフィルタ処理されません。s3_FilterTimeには、500msが指定されています。
s2_InputMask = 0 (16#0000)の場合、ビット0~Fはフィルタ処理されません。
s3_Timeで指定したフィルタ処理時間が、0未満または30000を超えるとき
s3_Timeで指定したフィルタ処理時間が、0未満または30000を超えるとき
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
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
bStartがTRUEのとき、s1_Inに適用されたデータのビットが次のように出力されます。フィルタ処理時間後、フィルタされたビットはwOutputDataにのみ書き込まれます。詳細は、タイムチャートをご参照ください。
n_Bitsに適用されたマスクデータで設定されていないビットは、無条件で直接出力されます。
n_Bitsに適用されたマスクデータで設定されているビットは、s3_Timeで指定される時間(ms単位)の間安定した後に出力されます。
wOutputdataの値は100msのとき16#A9B0、この時間が経過すれば、wOutputDataの値は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;