Scrivi dati formattati in una stringa risultato
Questa istruzione scrive i dati formattati specificati su Data1 (espandibile a Data16) ad una stringa formattata in cui il formato viene specificato dalla stringa di controllo sFormat.
Ingresso
Stringa di controllo con formati del tipo di dato convertito che definiscono come dovrebbe essere creata la stringa formattata
Stringa variabile o costante di caratteri (fino a 256 caratteri) contenente la definizione di come la stringa dovrebbe essere creata.
La stringa di controllo consiste nel testo, il formato del tipo di dato convertito (%d, %e, ecc.), il codice di avanzamento linea (\n), e il codice scheda (\t).
La stringa formattata può contenere fino a 4096 caratteri. Se superano i 4096 caratteri, si verificherà un errore di calcolo.
È possibile specificare fino a 16 cifre per un formato del tipo di dato convertito. Se superano le 16 cifre, si verificherà un errore di calcolo.
Il numero massimo di caratteri dopo la conversione di 1 dato è 32, esclusi %s e %S. Se si superano i 32 caratteri, si verificherà un errore di calcolo.
Tutte le stringhe di caratteri che non sono riconosciute come formato del tipo di dato convertito sono trattate come testo da formattare.
Dato da formattare
Dati variabili da scrivere nella stringa formattata.
Disporre i dati variabili nell'ordine specificato nella stringa di controllo.
Uscita
Stringa formattata con i dati in formato ASCII.
L'ingresso Data1 può essere esteso fino a un massimo di 16 ingressi.
Il numero di ingressi Data1..DataN deve essere lo stesso del numero di formati del tipo di dato convertito nella stringa di ingresso specificata su sFormat.
Il tipo di dato su un ingresso di DataN deve corrispondere al relativo formato del tipo di dato convertito in sFormat (vedere tabella sottostante).
sFormat: p.es. %+12.5d,
Utilizzare i dati della stringa nel formato mostrato di seguito per specificare il tipo, il numero di caratteri e la precisione della stringa formattata. A seconda del tipo di dati da convertire è possibile selezionare anche una varietà di opzioni (come l'inserimento di un segno o di spazi).
Posizione nell’esempio |
Descrizione |
sFormat |
Dati binari |
Risultato della conversione in dati ASCII |
Commento |
|
---|---|---|---|---|---|---|
0 |
Nessun riempimento |
'%05d' |
100 |
'00100' |
se il numero di caratteri viene specificato, è possibile utilizzare un riempimento zero, aggiungendo uno zero (0) alla stringa di controllo sFormat in questa posizione. |
|
+ |
aggiunta di un segno più |
'%+4d' |
100 |
'+100' |
lunghezza quattro caratteri, valore decimale, segno + aggiunto |
|
- |
allineamento a sinistra |
'%-6d' |
100 |
'100 |
lunghezza sei caratteri, valore decimale, allineato a sinistra |
|
![]() |
(spazio) aggiunta di uno spazio al posto del segno più |
'% |
100 |
' |
lunghezza quattro caratteri, valore decimale riempito con spazi |
|
# |
inserimento di 0x per i numeri esadecimali |
'%#4X' |
100 |
'0X64' |
lunghezza quattro caratteri, valore numerico in formato esadecimale iniziante con 0X |
|
aggiungi sempre un punto decimale per il numero reale |
'%#8.0f' |
123.45678 |
' |
lunghezza otto caratteri, numero in virgola mobile, quattro spazi iniziali |
||
12 |
lunghezza dell'elemento di dato ASCII (con o senza virgola) Se la larghezza è inferiore rispetto al numero di caratteri richiesto da questo valore, si verifica un errore di calcolo. Vedere "Flag di errore" |
'%012d' |
100 |
'000000000100' |
lunghezza 12 caratteri con nove zeri iniziali |
|
nessuna lunghezza: |
'%d,' |
100 |
'100,' |
nessuna lunghezza è specificata, la virgola viene aggiunta |
||
precisione dopo il punto decimale |
||||||
.5 |
qualsiasi cifra dopo il punto decimale |
'%8.3f' |
123.45599 |
' |
lunghezza otto caratteri, precisione di tre caratteri dopo il punto decimale |
|
12.5 |
specificare il numero totale di caratteri (n) e il numero di caratteri di precisione (m) con [n.m], [n] o [.m]. Il numero di caratteri di precisione (m) cambia a seconda del tipo di dati di conversione. |
|||||
d , Ld, i , Li, u ,Lu, x , Lx , b, Lb |
rappresenta il numero di caratteri in stringhe numeriche. |
|||||
f, Lf, e, Le, E, LE |
rappresenta il numero di caratteri dopo il punto decimale. |
|||||
g, Lg, G, LG |
rappresenta il numero di cifre significative. |
|||||
Tipo di dato da convertire |
'%06d' |
100 |
' |
d , i , u , x , X , b: numero di caratteri in stringhe numeriche f: numero di caratteri dopo il punto decimale. g: numero di cifre significative. |
||
d |
intero con segno ® decimale ASCII |
'%6d' |
100 |
'000100' |
lunghezza sei caratteri, valore decimale con tre zeri iniziali |
|
u |
intero senza segno ® decimale ASCII |
'%10u' |
-100 |
' |
lunghezza 10 caratteri, sette spazi iniziali, intero senza segno |
|
x |
intero senza segno ® esadecimale ASCII |
'%4x' |
16#12A |
' |
lunghezza quattro caratteri, numero esadecimale minuscolo |
|
X |
esadecimale maiuscolo |
'%4X' |
16#12A |
' |
lunghezza quattro caratteri, numero esadecimale maiuscolo |
|
b |
intero BCD ® esadecimale ASCII |
'%5b' |
16#123 |
' |
lunghezza cinque caratteri, dato BCD |
|
f |
Numero reale in virgola mobile ® virgola mobile ASCII |
'%-6.2f' |
1.2345 |
'1.23 |
lunghezza sei caratteri, allineato a sinistra, precisione due cifre dopo il punto decimale |
|
e |
numero reale in virgola mobile ® annotazione esponenziale ASCII |
'%9.3e' |
1234.5678 |
'1.235e+03' |
lunghezza 9 caratteri, precisione 3 cifre dopo il punto decimale, esponenziale minuscolo |
|
E |
esponenziale maiuscolo 1.23E10 |
'%9.3E' |
1234.5678 |
'1.235E+03' |
lunghezza 9 caratteri, precisione 3 cifre dopo il punto decimale, esponenziale maiuscolo |
|
g |
numero reale in virgola mobile ® virgola mobile ASCII o annotazione esponenziale ASCII |
'%12g' |
1234.5678 |
' |
lunghezza 12 caratteri, numero in virgola mobile |
|
G |
maiuscolo mobile o esponenziale |
'%#9.3G' |
1234 |
' |
lunghezza nove caratteri, precisione tre caratteri dopo il punto decimale |
|
s |
stringa ®ASCII |
'%10s' |
abcdef |
'abcdef |
Dati stringa (per il numero di caratteri specificato) |
|
S |
stringa ®ASCII maiuscolo |
'%-10S' |
abcDEF |
' |
dati stringa con distinzione tra maiuscole e minuscole |
Stringa di controllo |
Dati binari prima della conversione |
Dati ASCII dopo la conversione |
Esempio |
---|---|---|---|
'%d' o '%i' |
Dati a 16 bit (intero con segno) |
Dati ASCII decimali |
'%d' , '%5d' , '%+5d" '%-5d' , '%05d' , '%10.5d' , '%d,' , '% d' |
'%Ld' o '%Li' |
Dati a 32 bit (intero con segno) |
||
'%u' |
Dati a 16 bit (intero senza segno) |
'%u' , '%5u' , '%+5u' '%-5u' , '%05u' , '%10.5u' , '%u,' |
|
'%Lu' |
Dati a 32 bit (intero senza segno) |
||
'%x' |
Dati a 16 bit |
Dati esadecimali ASCII (direzione avanti/inversa) |
'%x' , '%5x' , '%-5x' '%05x' , '%10.5x' , '%x,' , '%#x' , '%X' |
'%Lx' |
Dati a 32 bit |
||
'%b' |
Dati BCD a 16 bit |
'%b' , '%5b' , '%-5b' '%05b' , '%10.5b' , '%b,' |
|
'%Lb' |
Dati BCD a 32 bit |
||
'%f' |
Dati numeri reali singoli di precisione a 32 bit |
Dati ASCII a virgola mobile |
'%f' , '%5.2f' , '%+5.2f' '%-5.2f' , '%05.2f' , '%f,' , '%#f' , '% f' |
'%Lf' |
Dati numeri reali doppi di precisione a 64 bit |
||
'%e' |
Dati numeri reali singoli di precisione a 32 bit |
Annotazione esponenziale dati ASCII |
'%e' , '%5.2e' , '%+5.2e' '%-5.2e' , '%05.2e' ,'%e,' '%#5.2e' , '% e' , '%E' |
'%Le' |
Dati numeri reali doppi di precisione a 64 bit |
||
'%LE' |
Dati numeri reali lunghi doppi di precisione a 64 bit |
'%#5.2E' , '% E' , '%E' |
|
'%g' |
Dati numeri reali singoli di precisione a 32 bit |
Annotazione esponenziale dati ASCII o dati ASCII a virgola mobile (qualsiasi sia il più corto nell'annotazione interessata) |
'%g' , '%5.2g' , '%+5.2g' '%-5.2g' , '%05.2g' ,'%g," '%#5.2g' , '%G' |
'%Lg' |
Dati numeri reali doppi di precisione a 64 bit |
||
'%LG' |
Dati numeri reali lunghi doppi di precisione a 64 bit |
'%-5.2G' , '%05.2G' ,'%G," '%#5.2G' , '%G' |
|
'%s' |
Dati stringa |
Dati stringa (per il numero di caratteri specificato) |
'%s' , '%5s' , '%-5s' , '%-05s' |
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 risultato della conversione supera l'area.
se una delle larghezze dell'elemento del dato ASCII specificato è inferiore rispetto al numero di caratteri necessario per il valore
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 risultato della conversione supera l'area.
se una delle larghezze dell'elemento del dato ASCII specificato è inferiore rispetto al numero di caratteri necessario per il valore
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
bFormat: BOOL:=FALSE;
sFormatString: STRING[50]:='Current Value: %6d [Min: %6d, Max: %6d]';
sFormattedString: STRING[50]:='';
iCurrentValue: INT:=815;
iMin: INT:=-16756;
iMax: INT:=23456; END_VAR
Quando la variabile bStart passa da FALSE a TRUE, la funzione viene eseguita.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_CONTACT,,bFormat,7,1,9,3,);
B(B_F,E_FP_FORMAT_STRING-3!,,25,0,36,7,,?DEN?dsFormat?dData1?dData2?dData3?AENO?c);
B(B_VARIN,,sFormatString,23,2,25,4,);
B(B_VAROUT,,sFormattedString,36,2,38,4,);
B(B_VARIN,,iCurrentValue,23,3,25,5,);
B(B_VARIN,,iMin,23,4,25,6,);
B(B_VARIN,,iMax,23,5,25,7,);
L(1,0,1,7);
L(1,2,7,2);
L(9,2,25,2);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bFormat) then
sFormattedString := FP_FORMAT_STRING(sFormatString,
iCurrentValue, iMin, iMax);
end_if;