FP_DEBOUNCE

一定時間のビットのフィルタによるデータのデバウンス

このFP命令は、指定したビットについてフィルタ処理を行い、ビットの信号を一定時間安定させます。この命令は、スイッチのバウンスの影響を無効にする場合などに利用することができます。

パラメータ

入力

s1_In (WORD)

入力マスクに従ってビットをフィルタ処理する入力データ

n_Bits (WORD, INT, UINT)

どのビットをフィルタするかを指定する入力マスク

s3_Time (INT)

指定したビットの信号を安定させる時間をミリ秒単位で指定

出力

d (WORD)

フィルタ後のデータ

タイムチャート

  • s2_InputMask = 1 (16#0001)の場合、ビット0はフィルタ処理され、それ以外のビットはフィルタ処理されません。s3_FilterTimeには、500msが指定されています。

    1.  (1) 入力データのビット0
    2.  (2) フィルタ処理結果のビット0
    3.  (3) 実行条件の立ち上がりで、データを初期化します
    4.  (4) 実行条件がOFFの間は、動作しません
  • s2_InputMask = 0 (16#0000)の場合、ビット0~Fはフィルタ処理されません。

    1.  (1) 入力データのビット1~15
    2.  (2) フィルタ処理結果のビット1~15
    3.  (3) 実行条件の立ち上がりで、データを初期化します
    4.  (4) 実行条件がOFFの間は、動作しません

エラーフラグ

sys_bIsOperationErrorHold (TRUEになり、TRUEを保持)
  • s3_Timeで指定したフィルタ処理時間が、0未満または30000を超えるとき

sys_bIsOperationErrorNonHold (1回のスキャンに対してTRUE)
  • s3_Timeで指定したフィルタ処理時間が、0未満または30000を超えるとき

POUヘッダ

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

POUボディ

bStartTRUEのとき、s1_Inに適用されたデータのビットが次のように出力されます。フィルタ処理時間後、フィルタされたビットはwOutputDataにのみ書き込まれます。詳細は、タイムチャートをご参照ください。

  • n_Bitsに適用されたマスクデータで設定されていないビットは、無条件で直接出力されます。

  • n_Bitsに適用されたマスクデータで設定されているビットは、s3_Timeで指定される時間(ms単位)の間安定した後に出力されます。

LDボディ

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

STボディ

If (bStart) then
    FP_DEBOUNCE(s1_In := wInputData, 
                n_Bits := wInputMask, 
                s3_Time := iFilterTime, 
                d => wOutputData);
End_if;

最終修正日: 2021-01-11このページに関するフィードバックお問い合わせ窓口