Binario -> conversione ASCII
Questa istruzione FP converte dati binari a 16 bit/ 32 bit memorizzati nell'area specificata da s2_BinaryData in codice ASCII. Il metodo di conversione viene specificato dalla stringa di controllo di s1_Format. Il risultato della conversione viene memorizzato nell'area specificata da d_AsciiData.
Ingresso
Formato stringa e controllo impostati tra virgolette
Indirizzo iniziale per memorizzare i dati binari
Quantità di numeri da convertire: 0–65535
Posizione iniziale nel dato ASCII: 0–255
Uscita
Indirizzo iniziale per memorizzare i dati ASCII
Posizione nel codice di controllo |
Descrizione |
s1_Format |
PLC a 16 bit |
PLC a 32 bit |
|
---|---|---|---|---|---|
Direzione di conversione |
|||||
+ |
Avanti (solo per numeri esadecimali con tipo di dato convertito x, X) |
'+%4X' |
● |
● |
|
se il segno più viene omesso: inversa (impostazione di default) |
'%4X' |
● |
● |
||
% |
tipo di dato convertito per formato stringa (obbligatorio) |
● |
● |
||
formato riempimento elementi mancanti |
|||||
0 |
carattere 0 utilizzato come riempitivo |
'%06x' |
- |
● |
|
+ |
aggiungere un segno più |
'%+4d' |
- |
● |
|
- |
allineamento a sinistra |
'%-6d' |
- |
● |
|
˽ |
(spazio) aggiunta di uno spazio al posto del segno più |
'%˽4d' |
- |
● |
|
# |
inserire 0x per numeri esadecimali |
'%#4X' |
- |
● |
|
aggiungere sempre un punto decimale per un numero reale |
'%#8.0f' |
- |
● |
||
8 |
ampiezza del dato ASCII |
'%08d' |
● |
● |
|
nessuna ampiezza
|
'%d,' |
- |
● |
||
precisione dopo il punto decimale |
|||||
.5 |
qualsiasi cifra dopo il punto decimale |
'%8.5f' |
- |
● |
|
I |
tipo di dato convertito doppio p.es. tipo di dato convertito con l = Ii -> DINT |
'+%4ld' |
● |
● |
|
formato del tipo di dato convertito |
|||||
i |
INT |
'%10i' |
● |
● |
|
u |
UINT |
'%10u' |
- |
● |
|
d |
INT |
'%6d' |
● |
● |
|
x |
esadecimale minuscolo |
'+%4x' |
● |
● |
|
X |
esadecimale maiuscolo |
'+%4X' |
● |
● |
|
b |
BCD |
'+%5b' |
- |
● |
|
f |
Numero in virgola mobile |
'+%-6.2f' |
- |
● |
|
e |
esponenziale 1.23e10 |
'+%9.3e' |
- |
● |
|
E |
esponenziale maiuscolo 1.23E10 |
'+%9.3E' |
- |
● |
|
g |
mobile o esponenziale |
'+%12g' |
- |
● |
|
G |
maiuscolo mobile o esponenziale |
'+%9.3G' |
- |
● |
|
|
'+%8dPANA' |
- |
● |
● disponibile su PLC a 16 bit/32 bit
Esempio: '+%4X'
converte un valore binario in un valore con un'ampiezza di quattro caratteri in maiuscolo in direzione avanti (valido per PLC a 16 bit/32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
16#12A |
'˽12A' |
Esempio: '%4X'
converte un valore binario in un valore con un'ampiezza di quattro caratteri in maiuscolo in direzione indietro (valido per PLC a 16 bit/32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
16#B2A |
'˽B2A' |
Esempio: '%06d'
converte un valore binario in un valore con un'ampiezza di sei caratteri, valore decimale con tre zeri iniziali (valido solo per PLC a 32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
16#100 |
'000100' |
Esempio: '%+4d'
converte un valore binario in un valore con un'ampiezza di quattro caratteri, valore decimale, segno + aggiunto (valido solo per PLC a 32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
100 |
'+100 ˽ ˽' |
Esempio: '%-6d'
converte un valore binario in un valore con un'ampiezza di sei caratteri, allineamento a sinistra (valido solo per PLC a 32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
100 |
'100˽ ˽ ˽' |
Esempio: '%˽4d'
converte un valore binario in un valore con un'ampiezza di quattro caratteri con uno spazio iniziale (valido solo per PLC a 32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
100 |
'˽100' |
Esempio: '%#8.0f'
converte un valore binario in un valore con un'ampiezza di otto caratteri, numero in virgola mobile, quattro spazi iniziali (valido solo per PLC a 32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
123.45678 |
'˽ ˽ ˽ ˽123.' |
Esempio: '%8.3f'
converte un valore binario in un valore con un'ampiezza di otto caratteri, precisione tre caratteri dopo il punto decimale (valido solo per PLC a 32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
123.45599 |
'˽123.456' |
Esempio: '+%10u'
converte un valore binario in un valore con un'ampiezza di 10 caratteri, sette spazi iniziali, intero senza segno (valido solo per PLC a 32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
-100 |
'˽ ˽ ˽ ˽ ˽ ˽ ˽100' |
Esempio: '%06d'
converte un valore binario in un valore con un'ampiezza di sei caratteri con tre spazi iniziali (valido per PLC a 16 bit/32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
100 |
'˽ ˽ ˽100' |
Intervallo utilizzabile per il valore prima del tipo di dato convertito:
1–15 prima dei tipi di dati convertiti d, ld, i, li |
1–4 prima del tipo di dato convertito X |
1–8 prima del tipo di dato convertito lX |
se non viene specificata alcuna ampiezza, la virgola viene aggiunta p.es. '%d,'
(valido solo per PLC a 32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
100 |
'100,' |
FP_BIN_TO_ASCII: si suppone l’ampiezza minima richiesta
FP_ASCII_TO_BIN e FP_ASCII_CHECK: viene richiesto un separatore a virgola
Esempio: '+%4ld'
converte un valore binario in un valore con un'ampiezza di quattro caratteri, richiede DINT o DWORD per il risultato convertito (valido per PLC a 16 bit/32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
100 |
'˽100' |
Esempio: '+%6i'
converte un valore binario in un valore con un'ampiezza di sei caratteri, tre spazi iniziali, intero con segno in direzione avanti (valido per PLC a 16 bit/32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
-100 |
'˽ ˽ ˽-100' |
Esempio: '+%6d'
converte un valore binario in un valore con un'ampiezza di sei caratteri con tre zeri iniziali in direzione avanti (valido per PLC a 16 bit/32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
100 |
'000100' |
Esempio: '+%4X'
converte un valore binario in un valore con un'ampiezza di quattro caratteri, numero esadecimale in maiuscolo in direzione avanti (valido per PLC a 16 bit/32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
16#12A |
'˽12A' |
Esempio: '+%5b'
converte un valore binario in un valore con un'ampiezza di cinque caratteri, dati BCD (valido solo per PLC a 32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
16#123 |
'˽123' |
Esempio: '+%-6.2f'
converte un valore binario in un valore con un'ampiezza di sei caratteri, allineamento a sinistra, precisione due cifre dopo il punto decimale (valido solo per PLC a 32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
1.2345 |
'1.23˽' |
Esempio: '+%9.3e'
converte un valore binario in un valore con un'ampiezza di 9 caratteri, precisione 3 cifre dopo il punto decimale, minuscolo esponenziale (valido solo per PLC a 32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
1234.5678 |
'1.235e+03' |
Esempio: '1.235E+03'
converte un valore binario in un valore con un'ampiezza di 9 caratteri, precisione 3 cifre dopo il punto decimale, maiuscolo esponenziale (valido solo per PLC a 32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
1234.5678 |
'1.235E+03' |
Esempio: '+%12g'
converte un valore binario in un valore con un'ampiezza di 12 caratteri, numero in virgola mobile (valido solo per PLC a 32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
1234.5678 |
'˽ ˽ ˽ ˽ ˽1234.57' |
Esempio: '+%9.3G'
converte un valore binario in un valore con un'ampiezza di nove caratteri, precisione tre caratteri dopo il punto decimale, numero in virgola mobile, maiuscolo esponenziale (valido solo per PLC a 32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
1234 |
'˽ ˽ ˽1.E+03' |
Per FP_BIN_TO_ASCII: è possibile aggiungere qualsiasi stringa alla conversione
Esempio: '+%8dPANA'
converte un valore binario in un valore con un'ampiezza di otto caratteri, numero decimale, 'PANA' viene aggiunto (valido solo per PLC a 32 bit)
Dati binari |
Risultato della conversione in dati ASCII |
---|---|
100 |
'˽ ˽ ˽ ˽ ˽100PANA' |
se è presente un errore nella stringa di controllo specificata da sFormat.
se la direzione in avanti (+) viene specificata in sFormat quando il formato è decimale.
se il numero di caratteriASCII per unità convertita specificata da n_Conversions supera 4 per dato a 16 bit o 8 per dato a 32 bit quando il formato esadecimale è specificato da s1_Format.
se 0 viene specificato per il n. di unità da 16 o 32 bit (word da 1 o 2) da convertire in n_Conversions.
Se la quantità di numeri decimali da 16 o 32 bit da convertire specificato da n_Conversions supera l'area per memorizzare i dati ASCII.
se il risultato della conversione supera l'area.
se è presente un errore nella stringa di controllo specificata da sFormat.
se la direzione in avanti (+) viene specificata in sFormat quando il formato è decimale.
se il numero di caratteriASCII per unità convertita specificata da n_Conversions supera 4 per dato a 16 bit o 8 per dato a 32 bit quando il formato esadecimale è specificato da s1_Format.
se 0 viene specificato per il n. di unità da 16 o 32 bit (word da 1 o 2) da convertire in n_Conversions.
Se la quantità di numeri decimali da 16 o 32 bit da convertire specificato da n_Conversions supera l'area per memorizzare i dati ASCII.
se il risultato della conversione supera l'area.
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
bStart: BOOL:=FALSE;
iArray1: ARRAY [0..1] OF INT:=[1234,-56];
iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
END_VAR
Quando la variabile bStart passa da FALSE a TRUE, la funzione viene eseguita. Converte due unità da 16 bit in 2 x 4 dati ASCII. Offset = 1 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 := 10 ;
NETWORK_BODY
B(B_VARIN,,'%4d',10,5,12,7,);
B(B_VARIN,,iArray1,10,6,12,8,);
B(B_VARIN,,2,10,7,12,9,);
B(B_VAROUT,,iAscii1,25,5,27,7,);
B(B_CONTACT,,bStart,7,4,9,6,R);
B(B_COMMENT,,Converts two 16-bit units to 2x4 decimal ASCII data. Offset = 1 ASCII character (8-bit).,5,1,38,3,);
B(B_F,FP_BIN_TO_ASCII!,,12,3,25,10,,?DEN?hs1_Format?ds2_BinaryData?dn_Conversions?dn_AsciiDataStartPosition?AENO?cd_AsciiData);
B(B_VARIN,,1,10,8,12,10,);
B(B_COMMENT,,Result iAscii1: 'x1234 -56x',28,8,41,9,);
L(9,5,12,5);
L(1,5,7,5);
L(1,0,1,10);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(bStart) then
FP_BIN_TO_ASCII(s1_Format := '%4d',
s2_BinaryData := iArray1,
n_Conversions := 2,
d_AsciiData => iAscii1);
END_IF;