FP_BIN_TO_ASCII

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.

Parametri

Ingresso

s1_Format (STRING)

Formato stringa e controllo impostati tra virgolette

s2_BinaryData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

Indirizzo iniziale per memorizzare i dati binari

n_Conversions (WORD, INT, UINT)

Quantità di numeri da convertire: 0–65535

n_AsciiDataStartPosition (INT)

Posizione iniziale nel dato ASCII: 0–255

Uscita

d_AsciiData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

Indirizzo iniziale per memorizzare i dati ASCII

Spiegazione di ogni cifra del codice di controllo s1_Format:

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

  • FP_BIN_TO_ASCII: si suppone l’ampiezza minima richiesta

  • FP_ASCII_TO_BIN e FP_ASCII_CHECK: viene richiesto un separatore a virgola

'%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'

-

  • Per FP_BIN_TO_ASCII: è possibile aggiungere qualsiasi stringa alla conversione, p.es. 'PANA'

  • Per FP_ASCII_TO_BIN e FP_ASCII_CHECK: è consentita solo la virgola

'+%8dPANA'

-

disponibile su PLC a 16 bit/32 bit

Esempi di stringa di controllo s1_Format

  • 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'

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

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

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
		bStart: BOOL:=FALSE;
		iArray1: ARRAY [0..1] OF INT:=[1234,-56];
		iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
	END_VAR

Corpo del POU

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

Corpo LD

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

Corpo ST

IF DF(bStart) then
    FP_BIN_TO_ASCII(s1_Format := '%4d', 
        s2_BinaryData := iArray1, 
        n_Conversions := 2, 
        d_AsciiData => iAscii1);
END_IF;

L'ultima revisione: 2024-12-18Feedback su questa paginaPanasonic hotline