通过在指定时间内过滤位来对数据去抖
此FP指令对指定的位执行过滤处理,以确保其信号在指定时间内保持稳定。此指令可用于抵消抖动效果,例如对于切换设备。
输入
将根据输入掩码过滤位的输入数据
指定哪些位将被过滤的输入掩码
指定时间(以毫秒为单位),在此期间指定位的信号必须保持稳定
输出
过滤的数据
1 (16#0001)被分配到s2_InputMask,即第0位将被过滤,其他位不被过滤,且分配到s3_FilterTime的值为500ms。
0 (16#0000)被分配到s2_InputMask,即第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指定的时间(以毫秒为单位)内保持稳定后,才会输出这些位。
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
If (bStart) then
FP_DEBOUNCE(s1_In := wInputData,
n_Bits := wInputMask,
s3_Time := iFilterTime,
d => wOutputData);
End_if;