Corregir rebotes de datos mediante el filtrado de bits durante un tiempo determinado
Estas instrucciones FP ejecutan un filtrado proceso para bits especificados a fin de garantizar que su señal sea estable durante un tiempo especificado. Esta instrucción se utiliza para anular los efectos del ruido o los rebotes, por ejemplo en microruptores, etc.
Entrada
Datos de entrada cuyos bits se van a filtrar según la máscara de entrada
Máscara de entrada que especifica qué bits se van a filtrar
Especifica el tiempo en ms durante el cual la señal en los bits especificados debe ser estable
Salida
Datos filtrados
si el tiempo de filtrado proceso especificado por s3_Time es inferior a 0 o superior a 30000.
si el tiempo de filtrado proceso especificado por s3_Time es inferior a 0 o superior a 30000.
Todas las variables de entrada y de salida utilizadas para la programación de esta función han sido declaradas en la Cabecera de la POU. Se utiliza la misma cabecera de la POU para todos los lenguajes de programación.
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
Si bStart es TRUE, los bits de los datos aplicados a s1_In se envían de la siguiente manera: Los bits filtrados solo se escriben a wOutputData una vez transcurrido el tiempo de filtrado. Véase en las gráficas temporales una explicación detallada.
Los bits no ajustados en los datos de la máscara aplicados a n_Bits se envían directamente sin condiciones.
Los bits ajustados en los datos de la máscara aplicados a n_Bits se envían después de que su señal haya permanecido estable durante el tiempo especificado por s3_Time en ms.
wOutputdata tiene el valor 16#A9B0 durante 100ms. Una vez transcurrido este tiempo, wOutputData tiene el valor 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;