Échange de blocs de données de 16 bits
La fonction échange deux blocs de données de 16 bits. Le début du premier bloc de données est indiqué en sortie d1_Start et sa fin en sortie d2_End. La sortie d3_Start désigne le début du deuxième bloc de données.
Sortie
Zone de départ de 16 bits du 1er bloc de données
Zone de fin de 16 bits du 1er bloc de données
Zone de départ de 16 bits du 2e bloc de données
Si l’adresse des variables en sortie d1_Start > d2_End.
Si le bloc de données qui doit être échangé est plus grand que la zone de destination.
Si l’adresse des variables en sortie d1_Start > d2_End.
Si le bloc de données qui doit être échangé est plus grand que la zone de destination.
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
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
La fonction est exécutée lorsque la variable start est sur TRUE.
Cette fonction échange les données du tableau (ARRAY) data_field_1 (du 2e au 5e élément) avec les données du tableau (ARRAY) data_field_2 (à partir du 3e élément).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;