Codage état du bit -> nombre hexadécimal
Cette instruction FP 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 codage est sauvegardé dans la zone de destination de 16 bits désignée par d_Start à partir de la position du bit indiquée. Les bits invalides dans la zone de données pour le résultat du codage sont remplis avec des zéros.
FP_ENCODE est l’instruction inverse de FP_DECODE.
Entrée
Zone de départ de 16 bits qui doit être codée (source)
Données de contrôle pour indiquer la position du bit de départ et le nombre de bits qui doivent être codés
Sortie
Zone de 16 bits dans laquelle les données 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 avec s2_Control=16#0005
16# |
0 |
0 |
0 |
5 |
|
↑ |
↑ |
Nombre de bits qui doivent être codés : 25=32 bits |
|||
Position du bit de départ des données qui doivent être codées : position du bit 0 |
Le résultat du codage 8 (décimal) est enregistré dans d_Start lorsque le déclencheur EN est TRUE.
Description du process
Le contenu du segment de bit 2^nL au début de la zone spécifiée par s1_Start est codé (nL désignant le nombre de bits à coder).
Le résultat du codage est sauvegardé en tant que données décimales dans les huit bits à partir du bit spécifié comme étant le bit nH (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 des données de destination et le nombre de bits qui doivent être 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 des données de destination codées |
Valeur paramétrée 16#0–16#8 |
(4) Nombre de bits codés |
||
16#0 |
0 |
16#1 |
2 |
||
16#1 |
1 |
16#2 |
4 |
||
16#2 |
2 |
16#3 |
8 (1 octet) |
||
16#3 |
3 |
16#4 |
16 (1 mot) |
||
16#4 |
4 |
16#5 |
32 (2 mots) |
||
16#5 |
5 |
16#6 |
64 (4 mots) |
||
16#6 |
6 |
16#7 |
128 (8 mots) |
||
16#7 |
7 |
16#8 |
256 (16 mots) |
||
16#8 |
8 |
||||
16#9 |
9 |
||||
16#A |
10 |
||||
16#B |
11 |
||||
16#C |
12 |
||||
16#D |
13 |
||||
16#E |
14 |
||||
16#F |
15 |
Exemple de données codées
Lorsque des données 16 bits (nL=4) sont codées, le résultat du codage est comme indiqué ci-dessous.
Données à coder (4 bits) |
Résultat du codage |
|
---|---|---|
Hex. |
Déc. |
|
0000 0000 0000 0001 |
16#0000 |
0 |
0000 0000 0000 0010 |
16#0001 |
1 |
0000 0000 0000 0100 |
16#0010 |
2 |
0000 0000 0000 1000 |
16#0011 |
3 |
0000 0000 0001 0000 |
16#0100 |
4 |
0000 0000 0010 0000 |
16#0101 |
5 |
0000 0000 0100 0000 |
16#0110 |
6 |
0000 0000 1000 0000 |
16#0111 |
7 |
0000 0001 0000 0000 |
16#1000 |
8 |
0000 0010 0000 0000 |
16#1001 |
9 |
0000 0100 0000 0000 |
16#1010 |
10 |
0000 1000 0000 0000 |
16#1011 |
11 |
0001 0000 0000 0000 |
16#1100 |
12 |
0010 0000 0000 0000 |
16#1101 |
13 |
0100 0000 0000 0000 |
16#1110 |
14 |
1000 0000 0000 0000 |
16#1111 |
15 |
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 les données à encoder sont toutes "0".
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 les données à encoder sont toutes "0".
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#0000000001000000;
wControlCode: WORD:=16#0003;
(*specifies the encodation*)
wOutput_value: WORD:=0;
(*result after a 0->1 leading
edge from start:
2#0000000000000110*)
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 := 5 ;
NETWORK_BODY
B(B_CONTACT,,bStart,6,1,8,3,);
B(B_VARIN,,wInput_value,10,2,12,4,);
B(B_VARIN,,wControlCode,10,3,12,5,);
B(B_VAROUT,,wOutput_value,20,2,22,4,);
B(B_F,FP_ENCODE!,,12,0,20,5,,?DEN?Ds1_Start?Ds2_Control?AENO?Cd_Start);
L(1,2,6,2);
L(8,2,12,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF bStart then
FP_ENCODE(s1_Start := wInput_value,
s2_Control := wControlCode,
d_Start => wOutput_value);
END_IF;