Home › Forum › Programmazione IEC 61131 (LogicLab) › Conversione di una variabile INT in String
Taggato: INT TO STRING CONVERSION
- Questo topic ha 1 risposta, 2 partecipanti ed è stato aggiornato l'ultima volta 1 anno, 4 mesi fa da Sergio Bertana.
-
AutorePost
-
Novembre 9, 2022 alle 6:06 pm #68561Giuseppe RomanoPartecipante
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
Novembre 10, 2022 alle 9:30 am #68564Sergio BertanaAmministratore del forumSi 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]);
-
AutorePost
- Devi essere connesso per rispondere a questo topic.