FP_DEBOUNCE

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.

Parámetros

Entrada

s1_In (WORD)

Datos de entrada cuyos bits se van a filtrar según la máscara de entrada

n_Bits (WORD, INT, UINT)

Máscara de entrada que especifica qué bits se van a filtrar

s3_Time (INT)

Especifica el tiempo en ms durante el cual la señal en los bits especificados debe ser estable

Salida

d (WORD)

Datos filtrados

Banderas de error

sys_bIsOperationErrorHold (pasa a TRUE y permanece TRUE)
  • si el tiempo de filtrado proceso especificado por s3_Time es inferior a 0 o superior a 30000.

sys_bIsOperationErrorNonHold (pasa a TRUE para un ciclo de scan)
  • si el tiempo de filtrado proceso especificado por s3_Time es inferior a 0 o superior a 30000.

Ejemplo

Cabecera de la POU

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

Cuerpo de la POU

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.

Cuerpo LD

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

Cuerpo en ST

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

Modificado el: 2019-11-07Comentarios sobre esta páginaLínea directa de Panasonic