Déplacement de données bit
1 bit de données ou de constantes de 16 bits spécifiées par s est copié vers un bit de la zone de données de 16 bits désignée par d en fonction du contenu de n, lorsque le déclencheur EN est TRUE. Lorsque s contient une constante sur 16 bits, le déplacement du bit n’est exécuté qu’après conversion de la constante en expression binaire sur 16 bits.
Entrée
Zone de 16 bits source
Indique les positions du bit source et de destination
Sortie
Zone de 16 bits de destination
Explication avec la valeur source s=16#8888, position du bit source 02 et position du bit de destination 0F définies par n=16#0F02
Au lieu d’utiliser cette instruction F, nous recommandons d’utiliser l’instruction FP7 correspondante : FP_MOVE_BITS
Les variables s et d doivent être du même type de données.
L’opérande n désigne le n° du bit comme suit :
16# |
0 |
F |
0 |
2 |
|
↑ |
↑ |
Position du bit source |
|||
Position du bit de destination |
Bits N° 0 à 3 |
N° du bit source (16#0 à 16#F) |
Bits N° 4 à 7 |
FP2/2SH et 10SH : nombre de bits à transférer (16#0 à 16#F) FP3 : invalide |
Bits N° 8 à 11 |
N° du bit de destination (16#0 à 16#F) |
Bits N° 12 à 15 |
Invalide |
Par exemple, en lisant de droite à gauche, n = 16#C01 déplacera un bit de la position un à la position 12 (16#C).
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*)
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
La fonction est exécutée lorsque la variable start est sur TRUE.
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 *) |