FP_DEBOUNCE

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.

Paramètres

Entrée

s1_In (WORD)

Données d’entrée dont les bits seront filtrés selon le masque d’entrée

n_Bits (WORD, INT, UINT)

Masque d’entrée indiquant quels bits seront filtrés

s3_Time (INT)

Indique le temps en ms pendant lequel le signal des bits spécifiés doit être stable

Sortie

d (WORD)

Données filtrées

Drapeaux d’erreur

sys_bIsOperationErrorHold (passe à TRUE et reste TRUE)
  • Si le temps de traitement du filtre désigné par s3_Time est inférieur à 0 ou supérieur à 30000.

sys_bIsOperationErrorNonHold (passe à TRUE pendant un cycle)
  • Si le temps de traitement du filtre désigné par s3_Time est inférieur à 0 ou supérieur à 30000.

Exemple

En-tête du POU

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

Corps du POU

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.

Corps en LD

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

Corps en ST

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

Modifié le : 2019-08-27Commentaires sur cette pageAssistance téléphonique