Conversion données HEX -> code ASCII
Cette instruction FP convertit les données hexadécimales à s_Start en code ASCII lorsque le déclencheur EN est TRUE. Le nombre d’octets devant être convertis est désigné par n_Bytes. Le résultat est sauvegardé dans la zone spécifiée par d_Start. Le code ASCII requiert 8 bits (un octet) pour exprimer un caractère hexadécimal. En raison de la conversion en code ASCII, les données converties seront deux fois plus longues que les données sources.
Entrée
Données hexadécimales
Nombre d’octets
Sortie
Adresse de départ de la zone de données dans laquelle le résultat est sauvegardé. La taille est de n_Bits * 2 mots.
Les deux caractères qui forment un octet sont interchangés lorsqu’ils sont sauvegardés. Deux octets sont convertis en un segment de données.
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
Si le nombre d’octets désigné par n_Bytes est supérieur à la zone spécifiée par s_Start.
Si le résultat calculé est supérieur à la zone désignée par d_Start.
Si n_Bytes= 0 ou une valeur négative
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
Si le nombre d’octets désigné par n_Bytes est supérieur à la zone spécifiée par s_Start.
Si le résultat calculé est supérieur à la zone désignée par d_Start.
Si n_Bytes= 0 ou une valeur négative
Offset |
Caractères hex. | Offset |
Codes ASCII convertis |
Équivalent STRING |
|||
s_Start |
0 |
16#ABCD |
Þ |
d_Start |
0 |
16#4443 |
DC |
n_Bytes |
16#0002 |
16#4241 |
BA |
Offset |
Caractères hex. | Offset |
Codes ASCII convertis |
Équivalent STRING |
|||
s_Start |
0 |
16#1234 |
Þ |
d_Start |
0 |
16#3433 |
43 |
1 |
16#5678 |
1 |
16#3231 |
21 |
|||
n_Bytes |
16#0004 |
16#3837 |
87 |
||||
16#3635 |
65 |
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;
awInput: ARRAY [0..2] OF WORD:=[16#ABCD,2(0)];
awResult: ARRAY [0..5] OF WORD:=[6(16#FFFF)];
END_VAR
La fonction est exécutée lorsque la variable bStart est définie sur TRUE.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 9 ;
NETWORK_BODY
B(B_COMMENT,,After conversion: ø^awResult[0]=16#4443ø^awResult[1]=16#4241ø^awResult[2]=16#3030ø^awResult[3]=16#3030ø^awResult[4] is not written,23,0,38,6,);
B(B_CONTACT,,bStart,4,5,6,7,R);
B(B_F,FP_HEX_TO_ASCII!,,12,4,22,9,,?DEN?D@'s'?Dn_Chars?AENO?Cd_Start);
B(B_VARIN,,awInput[0],10,6,12,8,);
B(B_VAROUT,,awResult[0],22,6,24,8,);
B(B_VARIN,,4,10,7,12,9,);
L(1,0,1,9);
L(1,6,4,6);
L(6,6,12,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (DF(bStart)) then
FP_HEX_TO_ASCII(s_Start := awInput[0], n_Bytes := 4, d_Start => awResult[0]);
(* After conversion:
awResult[0]=16#4443
awResult[1]=16#4241
awResult[2]=16#3030
awResult[3]=16#3030
awResult[4] is not written *)
end_if;