Filtrer des bits pendant un temps spécifié
L’instruction FP exécute le filtrage de certains bits pour stabiliser leurs signaux pendant un temps indiqué. Elle peut être utile pour inverser les effets des rebonds, par ex. pour un appareil de connexion.
Entrée
Données d’entrée dont les bits seront filtrés selon le masque d’entrée
Masque d’entrée indiquant quels bits seront filtrés
Indique le temps en ms pendant lequel le signal des bits spécifiés doit être stable
Sortie
Données filtrées
Si le temps de traitement du filtre désigné par s3_Time est inférieur à 0 ou supérieur à 30000.
Si le temps de traitement du filtre désigné par s3_Time est inférieur à 0 ou supérieur à 30000.
Toutes les variables d’entrée et de sortie utilisées pour programmer cette fonction ont été déclarées dans l’en-tête du POU. Le même en-tête de POU est utilisé pour tous les langages de programmation.
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 est TRUE, les bits des données appliquées à s1_In sont sortis de la façon suivante : Les bits filtrés sont écrits dans wOutputData uniquement lorsque le temps du filtrage s’est écoulé. Voir les chronogrammes pour en savoir plus.
Les bits qui ne sont pas définis dans le masque d’entrée spécifié par n_Bits sont sortis directement sans condition.
Les bits définis dans le masque d’entrée spécifié par n_Bits ne sont sortis qu’après que leur signaux aient été stables pendant le temps défini en ms par s3_Time.
wOutputdata a la valeur 16#A9B0 pendant 100ms, lorsque ce temps est écoulé wOutputData a la valeur 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;