Vai al contenuto

Conversione di una variabile INT in String

Home Forum Programmazione IEC 61131 (LogicLab) Conversione di una variabile INT in String

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #68561
    Giuseppe Romano
    Partecipante

    Avrei la necessità di creare un messaggio di testo formato da una parte fissa in formato String e di una variabile numerica in formato INT. Provenendo dalla programmazione embedded in C, avevo pensato alla semplice soluzione di convertire la variabile INT in String e poi concatenarla con la prima parte del messaggio ovvero la Stringa già disponibile. Esemplificando:

    Stringa1 := ‘il tuo numero è: ‘  (Variabile Stringa)

    counter := 1  (Variabile INT)

    MessaggioFinale= Stringa1 & INT_TO_STR(counter) – variabile risultato di tipo stringa

    Nell’esempio la funzione INT_TO_STR() sarebbe la funzione che mi servirebbe. Non trovo nulla del genere sul manuale e sul forum, ad eccezione della funzione SysVsnprintf che non ho ancora capito se è utilizzabile allo scopo.

    Potete cortesemente darmi qualche indicazione in merito? Grazie

    #68564
    Sergio Bertana
    Amministratore del forum

    Si proprio la funzione SysVsnprintf è quello che devi utilizzare, visto che hai esperienza di programmazione in linguaggio C la funzione si comporta come la snprintf() del C. Unica differenza che gli argomenti non possono essere variabili ma deve sempre essere un unico argomento di cui occorre definirne il tipo.

    Venendo alla tua necessità se cerchi nel manuale troverai molti esempi di utilizzo di questa funzione ma ecco un esempio per la tua esigenza.

    PROGRAM MyProgram
    VAR
        i : UDINT; (* Auxiliary variable *)
        Counter : ARRAY[0..1] OF UINT := [10, 20]; (* Counter value *)
        Message : STRING[ 32 ]; (* Final message *)
    END_VAR
    
        // Esempio di concatenazione stringhe con funzioni.
    
        i:=SysVsnprintf(ADR(Message), SIZEOF(Message), ADR('Counter[0]: %d'), UINT_TYPE, ADR(Counter[0])); //'Counter[0]: 10'
        i:=SysCVsnprintf(ADR(Message), SIZEOF(Message), ADR(', Counter[1]: %d'), UINT_TYPE, ADR(Counter[1])); //'Counter[0]: 10, Counter[1]: 20'
    
        // Esempio di concatenazione stringhe con operatori di conversione.
    
        Message:=CONCAT('Counter[0]: ', TO_STRING(Counter[0])); //'Counter[0]: 10'
        Message:=CONCAT(Message, ', Counter[1]: '); //'Counter[0]: 10, Counter[1]: '
        Message:=CONCAT(Message, TO_STRING(Counter[1])); //'Counter[0]: 10, Counter[1]: 20'
    
    // [End of file]

    Come vedi ho ottenuto lo stesso risultato utilizzando le funzioni o gli operatori di conversione in stringa. Nell’esempio ho anche visualizzato come realizzare una concatenzione di valori, la funzione snprintf() del C ti avrebbe permesso di fare tutto in una unica riga di codice:

        i=snprintf(Message, SIZEOF(Message), "Counter[0]: %d, Counter[1]: %d", Counter[0], Counter[1]);
Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Devi essere connesso per rispondere a questo topic.