FP_DETECT_CHANGE

Detectar cambios en los datos

Esta instrucción FP detecta cambios en el valor de entrada s_Current comparado con su valor anterior, que se almacena en la entrada/salida d1_Previous. Si el nuevo valor de entrada en s_Current no es igual al valor anterior, la función copia el nuevo valor en la entrada/salida d1_Previous. Para señalizar el cambio, la salida del sistema d2 pasa a TRUE.

Parámetros

Entrada

s_Current (INT, DINT, UINT, UDINT, REAL, LREAL)

Área de datos en la que detectar los cambios

Entrada/salida

d1_Previous (INT, DINT, UINT, UDINT, REAL, LREAL)

Área de datos donde se almacenan los datos de la ejecución anterior.

Salida

d2 (BOOL)

Pasa a TRUE cuando se detecta un cambio

Banderas de error

sys_bIsOperationErrorHold (pasa a TRUE y permanece TRUE)
  • si el área especificada utilizando el modificador índice supera el límite.
sys_bIsOperationErrorNonHold (pasa a TRUE para un ciclo de scan)
  • si el área especificada utilizando el modificador índice supera el límite.

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;
			(*activates the function*)
		diCurrent_value: DINT:=101;
			(*value whose status 
should be monitored*)
		diPrevious_value: DINT:=0;
			(*dummy value for storing 
the former present value*)
	END_VAR

Cuerpo de la POU

Cuando la variable bStart se encuentra a TRUE, se ejecuta la función.

Cuerpo LD

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_CONTACT,,bStart,6,2,8,4,);
B(B_VARIN,,diCurrent_value,10,3,12,5,);
B(B_VARIN,,diPrevious_value,10,4,12,6,);
B(B_F,FP_DETECT_CHANGE!,,12,1,24,6,,?DEN?Ds_Current?Dd1_Previous?Ad1_Previous?AENO?Cd2);
B(B_VAROUT,,bValueChanged,24,3,26,5,);
L(1,3,6,3);
L(8,3,12,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Cuerpo en ST

IF bStart then
    FP_DETECT_CHANGE(s_Current := diCurrent_value, d_Previous := diPrevious_value);
END_IF;

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