FP_DEBOUNCE

通过在指定时间内过滤位来对数据去抖

此FP指令对指定的位执行过滤处理,以确保其信号在指定时间内保持稳定。此指令可用于抵消抖动效果,例如对于切换设备。

参数

输入

s1_In (WORD)

将根据输入掩码过滤位的输入数据

n_Bits (WORD, INT, UINT)

指定哪些位将被过滤的输入掩码

s3_Time (INT)

指定时间(以毫秒为单位),在此期间指定位的信号必须保持稳定

输出

d (WORD)

过滤的数据

时间图

  • 1 (16#0001)被分配到s2_InputMask,即第0位将被过滤,其他位不被过滤,且分配到s3_FilterTime的值为500ms。

    1.  (1) 输入数据的第0位
    2.  (2) 过滤结果的第0位
    3.  (3) 当系统检测到触发器的上升沿时,将初始化数据。
    4.  (4) 当触发器为OFF时,指令不运作。
  • 0 (16#0000)被分配到s2_InputMask,即第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(对于一次扫描变为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指定的时间(以毫秒为单位)内保持稳定后,才会输出这些位。

LD本体

wOutputdata具有值16#A9B0(持续100ms),当已经过此时间时,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;

最后更新日期: 此页面上的反馈松下热线