Conversion code ASCII -> données binaires
Cette fonction convertit le code ASCII sauvegardé dans la zone indiquée par s2_AsciiData en données binaires de 16/32 bits. La méthode de conversion est spécifiée par n_ConversionMethod en fonction des quatre caractères de contrôle de s1_Control. Le résultat de la conversion est sauvegardé dans la zone spécifiée par d_BinaryData.
Entrée
Caractère de contrôle, par ex. D-16
D
: Convertit des données ASCII décimalesH
: Convertit des données ASCII hexadécimales+
Conversion vers l’avant-
Conversion inverse16
: Convertit les données ASCII en données de 16 bits, -32 768 à +32 767 (16#0 à 16#FFFF)32
Convertit les données ASCII en données de 32 bits, -2 147 483 648 à +2 147 483 647 (16#0 à 16#FFFFFFFF)Zone de départ de sauvegarde des données ASCII
Méthode de conversion, par ex. 16#404
(pour en savoir plus, voir les explications dans les tableaux suivants)
Sortie
Zone de départ de sauvegarde des données binaires
Si une erreur apparaît dans le caractère de contrôle désigné par s1_Control.
Si le sens normal (+) est indiqué dans s1_Control lorsque le format est décimal.
Si le nombre de caractères ASCII par unité convertie, indiqué par n_ConversionMethod, est supérieur à 4 pour des données de 16 bits ou 8 pour des données de 32 bits, lorsque le format hexadécimal est indiqué par s1_Control.
Si 0 est le nombre indiqué dans n_ConversionMethod pour les unités de 16 ou 32 bits (1 ou 2 mots) qui doivent être converties.
Si le nombre de décimales de 16 ou 32 bits qui doivent être converties, indiqué par n_ConversionMethod est supérieur à la zone de sauvegarde des données ASCII.
Si le résultat de la conversion est supérieur à la zone de sauvegarde.
Si une erreur apparaît dans le caractère de contrôle désigné par s1_Control.
Si le sens normal (+) est indiqué dans s1_Control lorsque le format est décimal.
Si le nombre de caractères ASCII par unité convertie, indiqué par n_ConversionMethod, est supérieur à 4 pour des données de 16 bits ou 8 pour des données de 32 bits, lorsque le format hexadécimal est indiqué par s1_Control.
Si 0 est le nombre indiqué dans n_ConversionMethod pour les unités de 16 ou 32 bits (1 ou 2 mots) qui doivent être converties.
Si le nombre de décimales de 16 ou 32 bits qui doivent être converties, indiqué par n_ConversionMethod est supérieur à la zone de sauvegarde des données ASCII.
Si le résultat de la conversion est supérieur à la zone de sauvegarde.
Pour les données avec virgules, indiquer le nombre maxi. pour les données numériques. Pour les données ASCII décimales, les espaces, les symboles et le point décimal sont inclus. La plage de données est délimitée par la chaîne de caractères de contrôle s1_Control.
s1_ Control=H+16
, n_ConversionMethod=16#404
Conversion vers l’avant 4–4 caractères ASCII
Données ASCII |
Données binaires |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Type de données |
Offs. en mots de 16 bits |
Nombre hexadécimal |
||||||||
D |
D+1 |
D+2 |
D+3 |
D+4 |
D+5 |
D+6 |
D+7 |
INT, WORD |
0 |
16#2301 |
'01' |
'23' |
'45' |
'67' |
'89' |
'0B' |
'CD' |
'EF' |
1 |
16#6745 |
|
2 |
16#AB89 |
|||||||||
3 |
16#EFCD |
s1_ Control=H-16
, n_ConversionMethod=16#404
Conversion inverse 4–4 caractères ASCII
Données ASCII |
Données binaires |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Type de données |
Offs. en mots de 16 bits |
Nombre hexadécimal |
||||||||
D |
D+1 |
D+2 |
D+3 |
D+4 |
D+5 |
D+6 |
D+7 |
INT, WORD |
0 |
6#0123 |
'01' |
'23' |
'45' |
'67' |
'89' |
'0B' |
'CD' |
'EF' |
1 |
16#4567 |
|
2 |
16#89AB |
|||||||||
3 |
16#CDEF |
s1_ Control=H+16
, n_ConversionMethod=16#403
Conversion vers l’avant 3–4 caractères ASCII
Données ASCII |
Données binaires |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Type de données |
Offs. en mots de 16 bits |
Nombre hexadécimal |
||||||||
D |
D+1 |
D+2 |
D+3 |
D+4 |
D+5 |
D+6 |
D+7 |
INT, WORD |
0 |
16#*201 |
'01' |
'23' |
'45' |
'67' |
'89' |
'0B' |
'CD' |
'EF' |
1 |
16#*534 |
|
2 |
16#*867 |
|||||||||
3 |
16#*B9A |
s1_ Control=H-16
, n_ConversionMethod=16#403
Conversion inverse 3–4 caractères ASCII
Données ASCII |
Données binaires |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Type de données |
Offs. en mots de 16 bits |
Nombre hexadécimal |
||||||||
D |
D+1 |
D+2 |
D+3 |
D+4 |
D+5 |
D+6 |
D+7 |
INT, WORD |
0 |
16#*012 |
'01' |
'23' |
'45' |
'67' |
'89' |
'0B' |
'CD' |
'EF' |
1 |
16#*345 |
|
2 |
16#*678 |
|||||||||
3 |
6#*9AB |
s1_ Control=H+32
, n_ConversionMethod=16#802
Conversion vers l’avant 8–2 caractères ASCII
Données ASCII |
Données binaires |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Type de données |
Offs. en mots de 16 bits |
Nombre hexadécimal |
||||||||
D |
D+1 |
D+2 |
D+3 |
D+4 |
D+5 |
D+6 |
D+7 |
DINT, DWORD |
0 |
16#67452301 |
'01' |
'23' |
'45' |
'67' |
'89' |
'0B' |
'CD' |
'EF' |
2 |
16#EFCDAB89 |
s1_ Control=H-32
, n_ConversionMethod=16#802
Conversion inverse 8–2 caractères ASCII
Données ASCII |
Données binaires |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Type de données |
Offs. en mots de 16 bits |
Nombre hexadécimal |
||||||||
D |
D+1 |
D+2 |
D+3 |
D+4 |
D+5 |
D+6 |
D+7 |
DINT, DWORD |
0 |
16#01234567 |
'01' |
'23' |
'45' |
'67' |
'89' |
'0B' |
'CD' |
'EF' |
2 |
16#89ABCDEF |
s1_ Control=H+32
, n_ConversionMethod=16#502
Conversion vers l’avant 5–2 caractères ASCII
Données ASCII |
Données binaires |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Type de données |
Offs. en mots de 16 bits |
Nombre hexadécimal |
||||||||
D |
D+1 |
D+2 |
D+3 |
D+4 |
D+5 |
D+6 |
D+7 |
DINT, DWORD |
0 |
16#***42301 |
'01' |
'23' |
'45' |
'67' |
'89' |
'0B' |
'CD' |
'EF' |
2 |
16#***97856 |
s1_ Control=H-32
, n_ConversionMethod=16#502
Conversion inverse 5–2 caractères ASCII
Données ASCII |
Données binaires |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Type de données |
Offs. en mots de 16 bits |
Nombre hexadécimal |
||||||||
D |
D+1 |
D+2 |
D+3 |
D+4 |
D+5 |
D+6 |
D+7 |
DINT, DWORD |
0 |
16#***01234 |
'01' |
'23' |
'45' |
'67' |
'89' |
'0B' |
'CD' |
'EF' |
2 |
16#***56789 |
* Les caractères spéciaux deviennent '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
bExecute: BOOL:=FALSE;
iArray2: ARRAY [0..1] OF INT:=[2(0)];
(*Begin ASCII: _1,23,04,-5,6_*)
iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
END_VAR
Lorsque bExecute est sur TRUE, l’instruction est exécutée. Elle convertit 2 x 4 caractères ASCII décimaux en données binaires. Offset = 0 caractère ASCII (8 bits).
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 9 ;
NETWORK_BODY
B(B_F,F251_ATOB!,Instance,9,3,21,9,,?DEN?Ds1_Control?Ds2_AsciiData?Dn_ConversionMethod?AENO?Cd_BinaryData);
B(B_VARIN,,'D-16',7,5,9,7,);
B(B_VARIN,,iAscii1,7,6,9,8,);
B(B_VARIN,,16#214,7,7,9,9,);
B(B_VAROUT,,iArray2,21,5,23,7,);
B(B_CONTACT,,bExecute,3,4,5,6,R);
B(B_COMMENT,,Result iArray2: [1234~-56],22,7,35,8,);
B(B_COMMENT,,Converts 2x4 decimal ASCII data to binary data. Offset = 1 ASCII character (8-bit).,2,1,35,2,);
L(1,5,3,5);
L(5,5,9,5);
L(1,0,1,9);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(bExecute) then
F251_ATOB(s1_Control := 'D-16',
s2_AsciiData := iAscii1,
n_ConversionMethod := 16#214,
d_BinaryData => iArray2);
END_IF;