Conversion données binaires -> code ASCII
Cette fonction convertit les données binaires de 16/32 bits sauvegardées dans la zone indiquée par s2_BinaryData en code ASCIII. 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_AsciiData.
Entrée
Caractère de contrôle
H : Convertit en données ASCII hexadécimales
- Conversion inverse
32 : Convertit en unités de 32 bits (2 mots)
Zone de départ de sauvegarde des données binaires
Méthode de conversion
(pour en savoir plus, voir les explications dans les tableaux suivants)
Sortie
Zone de départ de sauvegarde des données ASCII
Au lieu d’utiliser cette instruction F, nous recommandons d’utiliser l’instruction FP7 correspondante : FP_BIN_TO_ASCII
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.
(Les valeurs 'X' ne changent pas.)
Concernant le nombre de caractères ASCII (8 bits) par unité convertie
Conversion d’unités binaires de 16 bits en données ASCII hexadécimales :
Intervalle : 16#1–16#4
Conversion d’unités binaires de 32 bits en données ASCII hexadécimales :
Intervalle : 16#1–16#8
Conversion des données binaires en données ASCII décimales :
Intervalle : 16#1–16#F
s1_ Control=16+H
, n_Conversion Method=16#204
Conversion vers l’avant 2–4 caractères ASCII
Données binaires |
Résultat de la conversion en données ASCII |
|||||
---|---|---|---|---|---|---|
Type de données |
Offs. en mots de 16 bits |
Nombre hexadécimal |
D |
D+1 |
D+2 |
D+3 |
INT, WORD |
0 |
16#5678 |
'78' |
'56' |
'34' |
'12' |
1 |
16#1234 |
s1_ Control=16-H
, n_Conversion Method=16#204
Conversion inverse 2–4 caractères ASCII
Données binaires |
Résultat de la conversion en données ASCII |
|||||
---|---|---|---|---|---|---|
Type de données |
Offs. en mots de 16 bits |
Nombre hexadécimal |
D |
D+1 |
D+2 |
D+3 |
INT, WORD |
0 |
16#5678 |
'78' |
'56' |
'12' |
'34' |
1 |
16#1234 |
s1_ Control=16+H
, n_Conversion Method=16#203
Conversion vers l’avant 2–3 caractères ASCII
Données binaires |
Résultat de la conversion en données ASCII |
|||||
---|---|---|---|---|---|---|
Type de données |
Offs. en mots de 16 bits |
Nombre hexadécimal |
D |
D+1 |
D+2 |
D+3 |
INT, WORD |
0 |
16#0456 |
'56' |
'42' |
'31' |
'$xx$xx' |
1 |
16#0123 |
s1_ Control=16-H
, n_Conversion Method=16#203
Conversion inverse 2–3 caractères ASCII
Données binaires |
Résultat de la conversion en données ASCII |
|||||
---|---|---|---|---|---|---|
Type de données |
Offs. en mots de 16 bits |
Nombre hexadécimal |
D |
D+1 |
D+2 |
D+3 |
INT, WORD |
0 |
16#0456 |
'45' |
'61' |
'23' |
'$xx$xx' |
1 |
16#0123 |
s1_ Control=32+H
, n_Conversion Method=16#108
Conversion vers l’avant 1–8 caractères ASCII
Données binaires |
Résultat de la conversion en données ASCII |
|||||
---|---|---|---|---|---|---|
Type de données |
Offs. en mots de 16 bits |
Nombre hexadécimal |
D |
D+1 |
D+2 |
D+3 |
DINT, DWORD |
0 |
16#12345678 |
'78' |
'56' |
'34' |
'12' |
s1_ Control=32-H
, n_Conversion Method=16#108
Conversion inverse 1–8 caractères ASCII
Données binaires |
Résultat de la conversion en données ASCII |
|||||
---|---|---|---|---|---|---|
Type de données |
Offs. en mots de 16 bits |
Nombre hexadécimal |
D |
D+1 |
D+2 |
D+3 |
DINT, DWORD |
0 |
16#12345678 |
'12' |
'34' |
'56' |
'78' |
s1_ Control=32+H
, n_Conversion Method=16#105
Conversion vers l’avant 1–5 caractères ASCII
Données binaires |
Résultat de la conversion en données ASCII |
|||||
---|---|---|---|---|---|---|
Type de données |
Offs. en mots de 16 bits |
Nombre hexadécimal |
D |
D+1 |
D+2 |
D+3 |
DINT, DWORD |
0 |
16#00012345 |
'45' |
'23' |
'1$xx' |
'$xx$xx' |
s1_ Control=32-H
, n_Conversion Method=16#105
Conversion inverse 1–5 caractères ASCII
Données binaires |
Résultat de la conversion en données ASCII |
|||||
---|---|---|---|---|---|---|
Type de données |
Offs. en mots de 16 bits |
Nombre hexadécimal |
D |
D+1 |
D+2 |
D+3 |
DINT, DWORD |
0 |
16#00012345 |
'12' |
'34' |
'5$xx' |
'$xx$xx' |
Les valeurs 'X' ne changent pas.
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;
iArray1: ARRAY [0..1] OF INT:=[1234,-56];
iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
END_VAR
Lorsque bExecute est sur TRUE, l’instruction est exécutée. Elle convertit deux unités de 16 bits en 2 x 4 données ASCII décimales. Offset = 1 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,F250_BTOA!,Instance,9,3,21,9,,?DEN?Ds1_Control?Ds2_BinaryData?Dn_ConversionMethod?AENO?Cd_AsciiData);
B(B_VARIN,,'16-D',7,5,9,7,);
B(B_VARIN,,iArray1,7,6,9,8,);
B(B_VARIN,,16#214,7,7,9,9,);
B(B_VAROUT,,iAscii1,21,5,23,7,);
B(B_CONTACT,,bExecute,3,4,5,6,R);
B(B_COMMENT,,Result iAscii1: 'x1234 -56x',22,7,35,8,);
B(B_COMMENT,,Converts two 16-bit units to 2x4 decimal ASCII data. Offset = 1 ASCII character (8-bit).,2,1,35,3,);
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
F250_BTOA(s1_Control := '16-D',
s2_BinaryData := iArray1,
n_ConversionMethod := 16#214,
d_AsciiData => iAscii1);
END_IF;