Se ho ben capito nell’array sono inseriti già dei caratteri ascii, quindi se li vuoi trasferire su di una stringa non occorre fare nulla, basta essere certi di avere il codice tappo 16#00 al termine dei caratteri ed eseguire un semplice Sysmemmove. Ecco un esempio con diverse possibilità.
VAR
Tag1 : STRING[ 32 ]; (* Tag value *)
Tag2 : STRING[ 32 ]; (* Tag value *)
Tag3 : STRING[ 32 ]; (* Tag value *)
i : UDINT; (* Auxiliary variable *)
BArray : ARRAY[0..7] OF BYTE; (* Array of Tag ASCII characters *)
END_VAR
BArray[0]:=16#31; //'1';
BArray[1]:=16#32; //'2';
BArray[2]:=16#33; //'3';
BArray[3]:=0;
// Tutti gli esempi sotto riportati danno come risultato la stringa "123".
// Da notare che nella funzione "Sysmemmove" occorre copiare un byte in più
// della lungheza stringa per copiare anche il codice tappo 16#00.
i:=ArrayToFString(ADR(BArray), SIZEOF(BArray), BYTE_TYPE, ADR(Tag1), SIZEOF(Tag1), ADR('%c'), ADR(''));
i:=SysVsscanf(ADR(BArray), ADR('%s'), STRING_TYPE, ADR(Tag2));
i:=Sysmemmove(ADR(Tag3), ADR(BArray), Sysstrlen(ADR(BArray))+1);
Non capisco come mai nel tuo esempio:
i:=ArrayToFString(ADR(BArray), SIZEOF(BArray), BYTE_TYPE, ADR(Tag), SIZEOF(Tag), ADR('%c'), ADR(''));
Mi dici che non funziona, nel mio esempio funziona.