MOVE_BYTES

Mover datos de bytes

Esta función mueve una serie de bytes indicados por iNumberOfBytes desde los datos de origen indicados por SourceData con un offset de bytes de origen iSourceByteOffset a los datos de destino indicados por DestData con un offset de bytes de destino iDestByteOffset.

El offset de bytes de origen y el offset de bytes de destino son relativos al primer byte empezando por 0.

Entrada

SourceData (ANY) todos los tipos de datos simples y derivados (ARRAYs, DUTs) que no contengan datos BOOL

Datos de origen de los que se obtiene el byte

iSourceByteOffset (INT, DINT, UINT, UDINT)

Offset de bytes relativo al primer byte de los datos de origen a partir de 0, debe ser mayor o igual que 0

iNumberOfBytes (INT, DINT, UINT, UDINT)

El número de bytes que se mueven de los datos de origen a los datos de destino, debe ser mayor o igual a 0

iDestByteOffset (INT, DINT, UINT, UDINT)

Offset de bytes relativo al primer byte de los datos de destino empezando por 0, debe ser mayor o igual que 0

Entrada/salida

DestData (ANY) todos los tipos de datos simples y derivados (ARRAYs, DUTs) que no contengan datos BOOL

Datos de destino en los que se escriben los bytes

Observaciones

  • Comprobar la validez de los datos introducidos, ya que Control FPWIN Pro7 no comprueba la validez de los datos a los que se accede.

  • Asegurarse de que el área de bytes de origen y el área de bytes de destino no se solapan.

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
		bMoveToWordBoundary: BOOL:=FALSE;
		awSourceByteData: ARRAY [0..7] OF WORD:=[16#6160,16#6362,16#6564,16#6766,16#6968,16#6b6a,16#6d6c,16#6f6e];
		awDestByteData: ARRAY [0..7] OF WORD:=[8(16#FFFF)];
		iSourceByteOffset3: INT:=3;
		iDestByteOffset9: INT:=9;
		iNumberOfBytes5: INT:=5;
		iNumberOfBytes4: INT:=4;
		bMoveFromWordBoundary: BOOL:=FALSE;
	END_VAR

Cuerpo LD

Cuando la variable bMoveToWordBoundary o bMoveFromWordBoundary se encuentra en TRUE, se ejecuta la función.

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 10 ;
        NETWORK_BODY
B(B_COMMENT,,Move bytes to word boundary:,1,0,29,1,);
B(B_CONTACT,,bMoveToWordBoundary,8,3,10,5,);
B(B_F,E_MOVE_BYTES!,,19,2,30,10,,?DEN?DSourceData?DiSourceByteOffset?DiNumberOfBytes?DiDestByteOffset?DDestData?ADestData?AENO);
B(B_VARIN,,awSourceByteData,17,4,19,6,);
B(B_VARIN,,iSourceByteOffset3,17,5,19,7,);
B(B_VARIN,,iNumberOfBytes5,17,6,19,8,);
B(B_VARIN,,2,17,7,19,9,);
B(B_VARIN,,awDestByteData,17,8,19,10,);
L(1,0,1,10);
L(1,4,8,4);
L(10,4,19,4);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 10 ;
        NETWORK_BODY
B(B_COMMENT,,Move bytes from word boundary:,1,0,29,1,);
B(B_CONTACT,,bMoveFromWordBoundary,8,3,10,5,);
B(B_F,E_MOVE_BYTES!,,19,2,30,10,,?DEN?DSourceData?DiSourceByteOffset?DiNumberOfBytes?DiDestByteOffset?DDestData?ADestData?AENO);
B(B_VARIN,,awSourceByteData,17,4,19,6,);
B(B_VARIN,,2,17,5,19,7,);
B(B_VARIN,,iNumberOfBytes4,17,6,19,8,);
B(B_VARIN,,iDestByteOffset9,17,7,19,9,);
B(B_VARIN,,awDestByteData,17,8,19,10,);
L(1,0,1,10);
L(1,4,8,4);
L(10,4,19,4);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Cuerpo en ST

// Move bytes to word boundary:
if (bMoveToWordBoundary) then
	MOVE_BYTES(	SourceData := awSourceByteData, 
				iSourceByteOffset := iSourceByteOffset3, 
				iNumberOfBytes := iNumberOfBytes5, 
				iDestByteOffset := 2, 
				DestData := awDestByteData);
end_if;

// Move bytes from word boundary:
if (bMoveFromWordBoundary) then
	MOVE_BYTES(	SourceData := awSourceByteData, 
				iSourceByteOffset := 2, 
				iNumberOfBytes := iNumberOfBytes4, 
				iDestByteOffset := iDestByteOffset9, 
				DestData := awDestByteData);
end_if;

Modificado el: 2025-06-05Comentarios sobre esta páginaLínea directa de Panasonic