FP_FORMAT_STRING

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

sFormat (STRING)

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.

Data1 (INT, UINT, WORD, DINT, UDINT, DWORD, REAL, LREAL, STRING)

Dato da formattare

  • Dati variabili da scrivere nella stringa formattata.

  • Disporre i dati variabili nell'ordine specificato nella stringa di controllo.

Uscita

Risultato (STRING)

Stringa formattata con i dati in formato ASCII.

Note

  • 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).

Spiegazione ed esempi della stringa di controllo sFormat

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ù

'%4d'

100

'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

'123.'

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

'123.456'

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

'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

'100'

lunghezza 10 caratteri, sette spazi iniziali, intero senza segno

x

intero senza segno ® esadecimale ASCII

'%4x'

16#12A

'12a'

lunghezza quattro caratteri, numero esadecimale minuscolo

X

esadecimale maiuscolo

'%4X'

16#12A

'12A'

lunghezza quattro caratteri, numero esadecimale maiuscolo

b

intero BCD ® esadecimale ASCII

'%5b'

16#123

'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

'1234.57'

lunghezza 12 caratteri, numero in virgola mobile

G

maiuscolo mobile o esponenziale

'%#9.3G'

1234

'1.E+03'

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

'abcDEF'

dati stringa con distinzione tra maiuscole e minuscole

Dati di conversione per la stringa di controllo sFormat

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'

Flag di errore

sys_bIsOperationErrorHold (passa a TRUE e resta TRUE)
  • 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

sys_bIsOperationErrorNonHold (passa a TRUE per una scansione)
  • 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

Esempio

Intestazione del POU

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

Corpo LD

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

Corpo ST

if (bFormat) then
    sFormattedString := FP_FORMAT_STRING(sFormatString,
                                         iCurrentValue, iMin, iMax);
end_if;

L'ultima revisione: 2022-11-14Feedback su questa paginaPanasonic hotline