Vai al contenuto

Funzione SysVarsnprintf per costruire stringa

Home Forum Programmazione IEC 61131 (LogicLab) Funzione SysVarsnprintf per costruire stringa

Stai visualizzando 7 post - dal 1 a 7 (di 7 totali)
  • Autore
    Post
  • #35350
    Alessandro
    Partecipante

    Come posso convertire un valore REAL in una stringa utilizzando la funzione SysVarsnprintf ?

    #37613
    Sergio Bertana
    Amministratore del forum

    (Da Wikipedia) Molti linguaggi di programmazione implementano una funzione printf, per visualizzare sullo standard output una stringa costruita in base ad un formato specificato. Tale funzione ha origine dal linguaggio C, dove ha un prototipo simile al seguente: int printf(const char *format, …)

    Il parametro format è una stringa che descrive il formato da seguire nell’output e che utilizza delle sequenze segnaposto, introdotte dal simbolo percentuale (“%”), per specificare la posizione relativa e il tipo dei dati con cui comporre la stringa.

    Nella libreria delle funzioni embedded di SlimLine abbiamo introdotto le due funzioni:
    SysVarfprintf, per inviare la stringa sullo stream (eFILE) di uscita.
    SysVarsnprintf, per trasferire la stringa in un buffer di memoria.

    Rimandiamo al manuale Manuale programmazione IEC61131-3 su sistema SlimLine per una spiegazione dettagliata delle due funzioni.

    #37614
    Sergio Bertana
    Amministratore del forum

    Ma per rispondere alla tua domanda ecco lo screenshot di un programma LogicLab che illustra l’uso della funzione SysVarsnprintf per la conversione in stringa di una variabile REAL.

    Come si vede dalla finestra di Watch alla variabile Var ho impostato il valore 5.67, la stringa StrOut assume il valore “Value: 5.67” e 11 caratteri sono stati trasferiti in StrOut.

    La formattazione %5.2f indica di convertire in stringa una variabile REAL con 5 minimo cifre totali di cui 2 cifre decimali (Nelle cifre totali è compreso il punto). Da notare che siccome il valore della variabile è composto al massimo di 4 cifre 5.67, davanti alla 1a cifra intera è posto uno space.

    #39716
    Davide
    Partecipante

    Ma se dovessi fare il contrario? Ovvero convertire da stringa a real con la funzione SysVarsscanf come mai il risultato è un numero del tipo 3.6721e-44 ?

    #39717
    Sergio Bertana
    Amministratore del forum

    Ecco lo screenshot di un programma che utilizza la funzione SysVarsscanf con diversi tipi di variabili (Download programma). Alle righe 6 e 7 vi è la conversione da stringa a valore REAL e come vedi dalla visualizzazione delle variabili il valore ritornato in RVar è un numero con la virgola.

    #65768
    Stefano
    Partecipante

    Si potrebbe avere un esempio di SysVarsscanf con il formato ‘%{%d%}’ indicato nel manuale?

    Ho fatto un programma di test con la stringa ‘ 123 456 ‘ ed il formato come sopra ma SysVarsscanf restituisce sempre FALSE.

    #65825
    Sergio Bertana
    Amministratore del forum

    Purtroppo c’è un errore nella pagina “Stringa formato della funzione scanf” nel tagli/incolla delle definizioni del formato è scappato anche la definizione:

    %{format%} Repeatedly matches the format specifier format as many times as possible, and gives an array of arrays with the results. Example: %{%d%} matches zero or more integers.

    Ma questo formato non è gestito dalla SysVarsscanf.

Stai visualizzando 7 post - dal 1 a 7 (di 7 totali)
  • Devi essere connesso per rispondere a questo topic.