Conversion code ASCII -> BCD
Cette instruction FP convertit les codes ASCII hexadécimaux à partir de s1_Start en caractères BCD lorsque le déclencheur EN est TRUE. s2_Control désigne le nombre d’octets devant être convertis et le sens de la conversion.
Le résultat est sauvegardé dans d.
Entrée
Adresse de départ
Nombre d’octets devant être convertis et sens de la conversion
Sortie
Octets convertis
Paramétrer le code de contrôles2_Control
16 bits : 1–2 octets à convertir
32 bits : 1–4 octets à convertir
0 : avant
1 : inverse
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.
Conversion avant :
Conversion inverse :
Codes ASCII HEX exprimant des caractères BCD :
Caractère BCD |
Code ASCII HEX |
---|---|
0123456789 |
16#30 16#31 16#32 16#33 16#34 16#35 16#36 16#37 16#38 16#39 |
Exemple Données 16 bits signées/non signées, conversion vers l’avant, 4 caractères
Offset |
Codes ASCII |
Equivalent BCD |
Offset |
Caractères BCD convertis |
|||
s1_Start |
0 |
16#3231 |
21 |
Þ |
d |
0 |
16#3412 |
1 |
16#3433 |
3 |
1 |
||||
s2_Control |
16#0004 |
Exemple Données 16 bits, conversion inverse, 4 caractères
Offset |
Codes ASCII |
Equivalent BCD |
Offset |
Caractères BCD convertis |
|||
s1_Start |
0 |
16#3231 |
21 |
Þ |
d |
0 |
16#1234 |
1 |
16#3433 |
43 |
1 |
||||
s2_Control |
16#1004 |
Exemple Données 32 bits, conversion vers l’avant, 8 caractères
Offset |
Codes ASCII |
Equivalent BCD |
Offset |
Caractères BCD convertis |
|||
s1_Start |
0 |
16#3231 |
21 |
Þ |
d |
0 |
16#3412 |
1 |
16#3433 |
3 |
1 |
16#7856 |
|||
2 |
16#3635 |
65 |
2 |
||||
3 |
16#3837 |
87 |
3 |
||||
s2_Control |
16#0008 |
Exemple Données 32 bits, conversion inverse, 8 caractères
Offset |
Codes ASCII |
Equivalent BCD |
Offset |
Caractères BCD convertis |
|||
s1_Start |
0 |
16#3231 |
21 |
Þ |
d |
0 |
16#5678 |
1 |
16#3433 |
43 |
1 |
16#1234 |
|||
2 |
16#3635 |
65 |
2 |
||||
3 |
16#3837 |
87 |
3 |
||||
s2_Control |
16#1008 |
Exemple Données 32 bits, conversion inverse, 7 caractères
Si un nombre impair de caractères est converti, 0 est entré pour les positions de bits 0–3 du dernier octet converti lorsque le sens de la conversion est "vers l’avant". Si le sens de la conversion est "inverse", 0 est entré pour les positions de bits 4–7 :
Offset |
Codes ASCII |
Equivalent BCD |
Offset |
Caractères BCD convertis |
|||
s1_Start |
0 |
16#3231 |
21 |
Þ |
d |
0 |
16#4567 |
1 |
16#3433 |
43 |
1 |
16#0123 |
|||
2 |
16#3635 |
65 |
2 |
||||
3 |
16#3837 |
87 |
3 |
||||
s2_Control |
16#1007 |
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
Si des caractères ASCII autres que 16#30–16#39 sont spécifiés.
Si le nombre d’octets désigné par s2_Control est supérieur à la zone spécifiée par s1_Start.
Si le résultat de la conversion est supérieur à la zone de données spécifiée par d
Si s2_Control = 0
Si le sens de la conversion est en dehors de l’intervalle autorisé
Si le nombre d’octets désigné par s2_Control est supérieur à 8.
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
Si des caractères ASCII autres que 16#30–16#39 sont spécifiés.
Si le nombre d’octets désigné par s2_Control est supérieur à la zone spécifiée par s1_Start.
Si le résultat de la conversion est supérieur à la zone de données spécifiée par d
Si s2_Control = 0
Si le sens de la conversion est en dehors de l’intervalle autorisé
Si le nombre d’octets désigné par s2_Control est supérieur à 8.
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*)
wASCIIInput: WORD:=16#3031;
wControlCode: WORD:=16#2;
(*specifies the operation:
digit 0: the number of bytes
to convert
digit 1,2: has to be zero
digit 3: nomal or reverse direction*)
wConversionResult: WORD:=0;
(*result after a 0->1 leading
edge from start:
[16#2033,0]*)
END_VAR
La fonction est exécutée lorsque la variable bStart est définie sur TRUE. Deux caractères de la valeur d’entrée ASCII sont convertis vers l’avant.
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,5,2,7,4,);
B(B_VARIN,,wASCIIInput,11,3,13,5,);
B(B_VARIN,,wControlCode,11,4,13,6,);
B(B_VAROUT,,wConversionResult,23,3,25,5,);
B(B_F,FP_ASCII_TO_BCD!,,13,1,23,6,,?DEN?Ds1_Start?Ds2_Control?AENO?Cd);
L(1,3,5,3);
L(7,3,13,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if bStart then
FP_ASCII_TO_BCD(s1_Start := wASCIIInput,
s2_Control := wControlCode,
d => wConversionResult);
END_IF;