Transferencia de dígitos
Estas instrucciones FP mueven n_Digits números de dígitos del valor fuente s_Source desde la posición de dígitos n_SourcePos a la posición de dígitos de destino n_DestPos de los datos de 16 bits especificados por d_Dest.
Entrada
Área de datos fuente
Especifica la posición fuente de los dígitos hexadecimales (0–3)
Número de dígitos hexadecimales (1–4)
Especifica la posición de destino de los dígitos hexadecimales (0–3)
Salida
área de datos de destino
Si el número de dígitos de la posición de dígitos de inicio supera el número máximo de dígitos (n_SourcePos + n_Digits > 4), los dígitos restantes se desplazan a la posición de dígitos comenzando desde 0 de la misma palabra.
Las áreas s1_Start y s2_End deben cumplir:
en la misma área de memoria, p. ej., DT, WR, FL, LD ...
s1_Start £ s2_End
Transferir varios dígitos
Transferir cuatro dígitos
si una de las variables de entrada/variables de salida está fuera de rango
si una de las variables de entrada/variables de salida está fuera de rango
Instrucciones F correspondientes: F6_DGT
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
bStart: BOOL:=FALSE;
(*activates the function*)
wInput_value: WORD:=2#1000100010001000;
iSourceBitPosition: INT:=0;
(*digit no.0 locates the position of the source bit (here: 2)*)
iNumberofDigit: INT:=1;
iDestinationBitPosition: INT:=2;
(*digit no.2 locates the position of the destination bit (here: 15)*)
wOutput_value: WORD:=2#1111111111111111;
(*result after a 0->1 leading
edge from start:
2#0111111111111111*)
END_VAR
Cuando la variable bStart se encuentra a TRUE, se ejecuta la función.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_F,FP_MOVE_DIGITS!,,13,1,22,8,,?DEN?Ds_Source?Dn_SourcePos?Dn_Digits?Dn_DestPos?AENO?Cd_Dest);
B(B_VARIN,,wInput_value,11,3,13,5,);
B(B_CONTACT,,bStart,7,2,9,4,);
B(B_VARIN,,iSourceBitPosition,11,4,13,6,);
B(B_VARIN,,iNumberofDigit,11,5,13,7,);
B(B_VARIN,,iDestinationBitPosition,11,6,13,8,);
B(B_VAROUT,,wOutput_value,22,3,24,5,);
L(1,3,7,3);
L(9,3,13,3);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY
If (bStart) then
FP_MOVE_DIGITS(s_Source := wInput_value,
n_SourcePos := iSourceBitPosition,
n_Digits := iNumberofDigit,
n_DestPos := iDestinationBitPosition,
d_Dest => wOutput_value);
End_if;