F18_BXCH

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.

Ejemplo

Parámetros

Salida

d1_Start (WORD, INT, UINT)

área inicial de 16 bits del bloque de datos 1

d2_End (WORD, INT, UINT)

área final de 16 bits del bloque de datos 1

d3_Start (WORD, INT, UINT)

área inicial de 16 bits del bloque de datos 2

Banderas de error

sys_bIsOperationErrorHold (pasa a TRUE y permanece TRUE)
  • 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.

sys_bIsOperationErrorNonHold (pasa a TRUE para un ciclo de scan)
  • 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.

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

Cuerpo de la POU

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

Cuerpo 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

Cuerpo en ST

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

Cuerpo IL

Modificado el: 2021-07-14Comentarios sobre esta páginaLínea directa de Panasonic