Transferencia de bits
Copia 1 bit de un registro de 16 bits o de una constante especificada en s en el registro de 16 bits especificado en d según el contenido especificado en n si la entrada de trigger EN está a TRUE. Si en s se introduce una constante, la transferencia se realiza internamente realizando una conversión binaria del dato de 16 bits.
Entrada
Área de 16 bits fuente
Especifica las posiciones de los bits fuente y destino
Salida
Área de 16 bits destino
Explicación con valor fuente s=16#8888, posición del bit fuente 02 y posición del bit destino 0F definido por n=16#0F02
En lugar de utilizar esta instrucción F, se recomienda utilizar la instrucción FP7 correspondiente: FP_MOVE_BITS
Las variables s y d tienen que ser del mismo tipo de datos.
El operando n especifica el número de bit como se indica a continuación:
16# |
0 |
F |
0 |
2 |
|
↑ |
↑ |
Posición del bit fuente |
|||
Posición del bit destino |
Posición del bit: del 0 al 3 |
Nº del bit fuente (de 16#0 a 16#F) |
Posición del bit: del 4 al 7 |
FP2/2SH y 10SH: número de bits a transferir (de 16#0 a 16#F) FP3: no válido |
Posición del bit: del 8 al 11 |
Nº del bit de destino (de 16#0 a 16#F) |
Posición del bit: del 12 al 15 |
No válido |
Por ejemplo, si se lee desde la derecha, n = 16#C01 transfiere desde la posición uno, un bit a la posición 12 (16#C).
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*)
input_value: WORD:=2#1000100010001000;
copy_operand: WORD:=16#0F02;
(*digit no.1 and no.3 are invalid, digit no.0 locates
the position of the source bit (here: 2),
digit no.2 locates the position of the destination bit
(here: 15)*)
output_value: WORD:=2#1111111111111111;
(*result after a 0->1 leading
edge from start:
2#0111111111111111*)
END_VAR
Cuando la variable start está ajustada 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 := 6 ;
NETWORK_BODY
B(B_F,F5_BTM,,12,0,19,5,,?DEN?D@'s'?Dn?AENO?Cd);
B(B_CONTACT,,start,8,1,10,3,);
B(B_VARIN,,input_value,10,2,12,4,);
B(B_VARIN,,copy_operand,10,3,12,5,);
B(B_VAROUT,,output_value,19,2,21,4,);
L(1,2,8,2);
L(10,2,12,2);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F5_BTM( s:= input_value,
n:= copy_operand,
d=> output_value);
END_IF;
LD |
start |
(* EN = start; Starting signal for the F5_BTM function. *) |
F5_BTM |
input_value, copy_operand, output_value |
(* s = input_value (source) *) (* n = copy_operand; e.g. Var_1 = 16#0A0B *) (* 11 source bit (B) Þ 10 destination bit (A) *) |
(* d = output_value (destination) *) |
||
ST |
out |
(* option *) |