Intercambio de bloques de datos de 16 bits
Esta función intercambia un bloque de datos de 16 bits con otro. El inicio del primer bloque de datos se especifica en la salida d1_Start y su final en la salida d2_End. La salida d3_Start especifica el inicio del segundo bloque de datos.
Salida
área inicial de 16 bits del bloque de datos 1
área final de 16 bits del bloque de datos 1
área inicial de 16 bits del bloque de datos 2
si las direcciones de las variables de salida d1_Start > d2_End
si el bloque de datos a intercambiar es mayor que el área destino.
si las direcciones de las variables de salida d1_Start > d2_End
si el bloque de datos a intercambiar es mayor que el área destino.
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
start: BOOL:=FALSE;
(*activates the function*)
d1: ARRAY [0..5] OF INT:=[1,2,3,4,5,6];
(*result after a 0->1 leading
edge from start:
[1,2,8,9,10,6]*)
d2: ARRAY [0..5] OF INT:=[7,8,9,10,11,12];
(*result after a 0->1 leading
edge from start:
[7,3,4,5,11,12]*)
END_VAR
Cuando la variable start está ajustada a TRUE, se ejecuta la función.
Intercambia los datos del ARRAY data_field_1 (desde el 2° al 5° elemento) con los datos del ARRAY data_field_2 (a partir del 3er elemento en adelante).BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 13 ;
NETWORK_BODY
B(B_VARIN,,output,5,1,7,3,);
B(B_VAROUT,,data_field_1[2],15,2,17,4,);
B(B_VAROUT,,data_field_1[5],15,3,17,5,);
B(B_VAROUT,,data_field_2[3],15,4,17,6,);
B(B_F,F18_BXCH,,7,0,15,6,,?DEN?AENO?Cd1?Cd2?Cd3);
B(B_COMMENT,,data_field_1[2] <----> data_field_2[3]ø^data_field_1[3] <----> data_field_2[4]ø^data_field_1[4] <----> data_field_2[5]ø^data_field_1[5] <----> data_field_2[6],24,4,41,8,);
B(B_COMMENT,,data_field_1[6] data_field_2[7]ø^data_field_1[7]ø^data_field_1[8]ø^data_field_1[9],24,8,41,12,);
B(B_COMMENT,, data_field_2[0]ø^data_field_1[0] data_field_2[1]ø^data_field_1[1] data_field_2[2],24,1,41,4,);
L(1,0,1,13);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F18_BXCH(
d1_Start=> d1[2], d2_End=> d1[4], d3_Start=> d2[1]);
END_IF;