ASCII -> conversione binaria
Converte il codice ASCII memorizzato nell'area specificata da s2_AsciiData in un dato binario a 16 bit/32 bit. Il metodo di conversione è specificato da n_ConversionMethod sulla base dei quattro caratteri di controllo di s1_Control. Il risultato della conversione viene memorizzato nell'area specificata da d_BinaryData.
Ingresso
Stringa di controllo, p.es. D-16
D
converte dati ASCII decimaliH
converte i dati esadecimali ASCII+
direzione normale-
direzione inversa16
converte i dati ASCII in dati a 16 bit, da -32,768 a +32,767 (16#0 - 16#FFFF)32
converte i dati ASCII in dati a 32 bit, da -2,147,483,648 a +2,147,483,647 (16#0 - 16#FFFFFFFF)Area iniziale per memorizzare i dati ASCII
Metodo di conversione p.es. 16#404
(per i dettagli, vedere la spiegazione riportata dopo le tabelle)
Uscita
Area iniziale per memorizzare il dato binario
se è presente un errore nella stringa di controllo specificata da s1_Control.
se la direzione normale (+) è specificata in s1_Control quando il formato è decimale.
se il numero di caratteri ASCII per unità convertita specificato da n_ConversionMethod eccede 4 per i dati a 16 bit e 8 per i dati a 32 bit quando il formato esadecimale è specificato da s1_Control.
se 0 è specificato come numero di unità a 16 o 32 bit (1 o 2 word) da convertire in n_ConversionMethod.
se il numero di numeri decimali a 16 o 32 bit da convertire specificato da n_ConversionMethod eccede l'area di memorizzazione dei dati ASCII.
se il risultato della conversione eccede l'area.
se è presente un errore nella stringa di controllo specificata da s1_Control.
se la direzione normale (+) è specificata in s1_Control quando il formato è decimale.
se il numero di caratteri ASCII per unità convertita specificato da n_ConversionMethod eccede 4 per i dati a 16 bit e 8 per i dati a 32 bit quando il formato esadecimale è specificato da s1_Control.
se 0 è specificato come numero di unità a 16 o 32 bit (1 o 2 word) da convertire in n_ConversionMethod.
se il numero di numeri decimali a 16 o 32 bit da convertire specificato da n_ConversionMethod eccede l'area di memorizzazione dei dati ASCII.
se il risultato della conversione eccede l'area.
Per i dati delimitati da virgole, specificare il numero massimo di dati numerici. Per i dati ASCII decimali sono inclusi spazi, simboli e un punto decimale. L'intervallo di dati è limitato dalla stringa di caratteri di controllo s1_Control.
s1_ Control=H+16
, n_ConversionMethod=16#404
Direzione normale. 4 x 4 caratteri ASCII.
Dati ASCII |
Dati binari |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Tipo di dato |
Offset in unità word a 16 bit |
Numero esadecimale |
||||||||
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
Direzione inversa. 4 x 4 caratteri ASCII.
Dati ASCII |
Dati binari |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Tipo di dato |
Offset in unità word a 16 bit |
Numero esadecimale |
||||||||
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
Direzione normale. 3 x 4 caratteri ASCII.
Dati ASCII |
Dati binari |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Tipo di dato |
Offset in unità word a 16 bit |
Numero esadecimale |
||||||||
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
Direzione inversa. 3 x 4 caratteri ASCII.
Dati ASCII |
Dati binari |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Tipo di dato |
Offset in unità word a 16 bit |
Numero esadecimale |
||||||||
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
Direzione normale. 8 x 2 caratteri ASCII.
Dati ASCII |
Dati binari |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Tipo di dato |
Offset in unità word a 16 bit |
Numero esadecimale |
||||||||
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
Direzione inversa. 8 x 2 caratteri ASCII.
Dati ASCII |
Dati binari |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Tipo di dato |
Offset in unità word a 16 bit |
Numero esadecimale |
||||||||
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
Direzione normale. 5 x 2 caratteri ASCII.
Dati ASCII |
Dati binari |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Tipo di dato |
Offset in unità word a 16 bit |
Numero esadecimale |
||||||||
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
Direzione inversa. 5 x 2 caratteri ASCII.
Dati ASCII |
Dati binari |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Tipo di dato |
Offset in unità word a 16 bit |
Numero esadecimale |
||||||||
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 |
* I caratteri extra diventano '0'.
Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU. La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.
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
Quando bExecute è impostato su TRUE, l'istruzione viene eseguita. Converte 2 x 4 caratteri ASCII decimali in un dato binario. Offset = 0 carattere ASCII (8 bit).
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;