Décodage nombre hexadécimal -> état du bit
Cette instruction FP décode le contenu des données spécifiées par s1_Start en fonction du contenu de s2_Control lorsque le déclencheur EN est TRUE. Le résultat du décodage est enregistré dans la zone à partir de d_Start.
FP_DECODE est l’instruction inverse de FP_ENCODE.
Entrée
Zone source ou constante équivalente qui doit être décodée
Données de contrôle pour indiquer la position du bit de départ et le nombre de bits qui doivent être décodés
Sortie
Adresse de départ à partir de laquelle les données décodées vont être sauvegardées (destination)
Les variables s1_Start, s2_Control et d_Start doivent être du même type de données.
Exemple s2_Control=16#404
Les données décodées TRUE sont sauvegardées en position du bit 7 de d_Start.
Tous les bits sauf le bit 7 sont remplis avec des zéros.
Le contenu du segment de bit 2^nL à partir du bit nH de la zone spécifiée par s1_Start est décodé (nL désignant le nombre de bits à décoder).
Les résultats du décodage sont sauvegardés dans les segments de bits 2^nL à partir de la zone spécifiée par d_Start (nH désignant le bit de départ de la conversion). Les bits invalides dans la zone spécifiée pour le résultat sont remplis avec des zéros.
Description de s2_Control
s2_Control désigne la position du bit de départ et le nombre de bits qui doivent être décodés avec des données hexadécimales.
Les bits marqués par "-" sont invalides. |
|||||
Valeur paramétrée 16#0–16#F |
(3) Position du bit de départ qui doit être décodé |
Valeur paramétrée 16#0–16#8 |
(4) Nombre de bits décodés |
||
16#0 |
0 |
16#0 |
0 |
||
16#1 |
1 |
16#1 |
1 |
||
16#2 |
2 |
16#2 |
2 |
||
16#3 |
3 |
16#3 |
3 |
||
16#4 |
4 |
16#4 |
4 |
||
16#5 |
5 |
16#5 |
5 |
||
16#6 |
6 |
16#6 |
6 |
||
16#7 |
7 |
16#7 |
7 |
||
16#8 |
8 |
16#8 |
8 |
||
16#9 |
9 |
||||
16#A |
10 |
||||
16#B |
11 |
||||
16#C |
12 |
||||
16#D |
13 |
||||
16#E |
14 |
||||
16#F |
15 |
Rapport entre le nombre de bits et la zone de données occupée par le résultat décodé
Nombre de bits qui doivent être décodés |
Zone de données, nécessaire au résultat |
Nombre de bits décodés (résultat) |
---|---|---|
1 |
1 mot |
2 bits 1) |
2 |
1 mot |
4 bits 1) |
3 |
1 mot |
8 bits 1) |
4 |
1 mot |
16 bits |
5 |
2 mots |
32 bits |
6 |
4 mots |
64 bits |
7 |
8 mots |
128 bits |
8 |
16 mots |
256 bits |
1) Les bits invalides dans la zone de données nécessaire au résultat sont remplis avec des zéros.
Exemple de données décodées
Lorsque des données 4 bits sont décodées, le résultat du décodage (données 16 bits) est comme indiqué ci-dessous.
Condition du décodage : s2_Control
Position du bit de départ 0 : 16#0
Nombre de bits qui doivent être décodés : 16#4 (4 bits)
Données à décoder (4 bits) |
Résultat du décodage |
|
---|---|---|
Hex. |
Déc. |
|
16#0000 |
0 |
0000 0000 0000 0001 |
16#0001 |
1 |
0000 0000 0000 0010 |
16#0010 |
2 |
0000 0000 0000 0100 |
16#0011 |
3 |
0000 0000 0000 1000 |
16#0100 |
4 |
0000 0000 0001 0000 |
16#0101 |
5 |
0000 0000 0010 0000 |
16#0110 |
6 |
0000 0000 0100 0000 |
16#0111 |
7 |
0000 0000 1000 0000 |
16#1000 |
8 |
0000 0001 0000 0000 |
16#1001 |
9 |
0000 0010 0000 0000 |
16#1010 |
10 |
0000 0100 0000 0000 |
16#1011 |
11 |
0000 1000 0000 0000 |
16#1100 |
12 |
0001 0000 0000 0000 |
16#1101 |
13 |
0010 0000 0000 0000 |
16#1110 |
14 |
0100 0000 0000 0000 |
16#1111 |
15 |
1000 0000 0000 0000 |
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
Si 1 £ nL £ 8, nL désignant le nombre de bits qui doivent être codés/décodés.
Si 1 £ nH + nL £ 16, nH désignant le bit de départ de la conversion et nL désignant le nombre de bits qui doivent être codés/décodés.
Si la zone mémoire utilisée par le résultat décodé est en dehors des limites.
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
Si 1 £ nL £ 8, nL désignant le nombre de bits qui doivent être codés/décodés.
Si 1 £ nH + nL £ 16, nH désignant le bit de départ de la conversion et nL désignant le nombre de bits qui doivent être codés/décodés.
Si la zone mémoire utilisée par le résultat décodé est en dehors des limites.
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
bStart: BOOL:=FALSE;
(*activates the function*)
wInput_value: WORD:=2#1100011000011110;
wControlCode: WORD:=16#0003;
(*specifies decoding*)
wConversionResult: WORD:=0;
(*result after a 0->1 leading
edge from start:
2#0000000001000000*)
END_VAR
La fonction est exécutée lorsque la variable bStart est définie 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_CONTACT,,bStart,8,1,10,3,);
B(B_VARIN,,wInput_value,11,2,13,4,);
B(B_VARIN,,wControlCode,11,3,13,5,);
B(B_VAROUT,,wConversionResult,21,2,23,4,);
B(B_F,FP_DECODE!,,13,0,21,5,,?DEN?Ds1_Start?Ds2_Control?AENO?Cd_Start);
L(10,2,13,2);
L(1,2,8,2);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
FP_DECODE(s1_Start := wInput_value,
s2_Control := wControlCode,
d_Start => wConversionResult);
END_IF;