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.
Entrada
Área de datos en la que detectar los cambios
Entrada/salida
Área de datos donde se almacenan los datos de la ejecución anterior.
Salida
Pasa a TRUE cuando se detecta un cambio
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
Cuando la variable bStart se encuentra a TRUE, se ejecuta la función.
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
IF bStart then
FP_DETECT_CHANGE(s_Current := diCurrent_value, d_Previous := diPrevious_value);
END_IF;