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]);