Déplacer des digits de données
Les digits hexadécimaux de données ou de constantes de 16 bits spécifiés par s sont copiés dans la zone de 16 bits spécifiée par d comme spécifié par n.
Entrée
Zone de 16 bits source
Indique la position des digits hexadécimaux source et de destination et le nombre de digits hexadécimaux
Sortie
Zone de 16 bits de destination
Au lieu d’utiliser cette instruction F, nous recommandons d’utiliser l’instruction FP7 correspondante : FP_MOVE_DIGITS
Les digits sont des unités de 4 bits utilisées pour le transfert des données. Avec cette instruction, les données de 16 bits sont séparées en quatre digits. Les digits sont appelés dans l’ordre digit hexadécimal 0, digit 1, digit 2 et digit 3 à partir des quatre bits de poids faible :
Données de 16 bits
Bit
Digit hexadécimal
n indique la position des digits hexadécimaux source (3), le nombre de digits à copier (2) et la position du digit hexadécimal de destination (1) :
0 Digit hexadécimal 0
1 Digit hexadécimal 1
2 Digit hexadécimal 2
3 Digit hexadécimal 3
0 Copie d’1 digit hexadécimal (4 bits)
1 Copie de 2 digits hexadécimaux (8 bits)
2 Copie de 3 digits hexadécimaux (12 bits)
3 Copie de 4 digits hexadécimaux (16 bits)
0 Digit hexadécimal 0
1 Digit hexadécimal 1
2 Digit hexadécimal 2
3 Digit hexadécimal 3
Exemples de transfert de digits selon les indications de n
Avec n: 16#101, le digit hexadécimal 1 source est copié vers le digit hexadécimal 1 de destination.
Avec n: 16#003 (abrégé 16#3), le digit hexadécimal 3 source est copié vers le digit hexadécimal 0 de destination.
Avec n: 16#212, plusieurs digits hexadécimaux (digits hexadécimaux 2 et 3) source sont copiés vers plusieurs digits hexadécimaux (digits hexadécimaux 2 et 3) de destination.
Avec n: 16#210, plusieurs digits hexadécimaux (digits hexadécimaux 0 et 1) source sont copiés vers plusieurs digits hexadécimaux (digits hexadécimaux 2 et 3) de destination.
Avec n: 16#130, 4 digits hexadécimaux (digits hexadécimaux 0 à 3) source sont copiés vers 4 digits hexadécimaux (digits hexadécimaux 0 à 3) de destination.
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;
source: INT:=329;
(*decimal 329 = 16#149*)
specify_n: WORD:=16#111;
(*Beginning from the end:
1: first hex. digit is digit 1, i.e. 4
1: copies 2 hex. digits, i.e. 14
1: destination is hex. digit 1*)
output: INT:=0;
(*16#140 = decimal 320*)
END_VAR
La fonction est exécutée lorsque la variable start est sur TRUE. Les valeurs de source et output dans le Monitoring de l’en-tête du corps du schéma à contacts ont été définies pour afficher la valeur hexadécimale en activant le bouton Hex dans la barre d’outils.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,F6_DGT!,Instance,12,0,18,5,,?DEN?D@'s'?Dn?AENO?Cd);
B(B_VARIN,,source,8,2,10,4,);
B(B_VARIN,,specify_n,8,3,10,5,);
B(B_VAROUT,,output,18,2,20,4,);
B(B_CONTACT,,start,6,1,8,3,);
L(10,3,12,3);
L(10,4,12,4);
L(8,2,12,2);
L(1,2,6,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F6_DGT( s:= source,
n:= specify_n,
d=> output);
END_IF;