F18_BXCH

É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.

Exemple

Paramètres

Sortie

d1_Start (WORD, INT, UINT)

Zone de départ de 16 bits du 1er bloc de données

d2_End (WORD, INT, UINT)

Zone de fin de 16 bits du 1er bloc de données

d3_Start (WORD, INT, UINT)

Zone de départ de 16 bits du 2e bloc de données

Drapeaux d’erreur

sys_bIsOperationErrorHold (passe à TRUE et reste TRUE)
  • 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.

sys_bIsOperationErrorNonHold (passe à TRUE pendant un cycle)
  • 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.

Exemple

En-tête du POU

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

Corps du POU

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).

Corps en LD

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

Corps en ST

IF start then
    F18_BXCH(
         d1_Start=> d1[2], d2_End=> d1[4], d3_Start=>  d2[1]);
END_IF;

Corps en IL

Modifié le : 2021-08-09Commentaires sur cette pageAssistance téléphonique