ARG_TO_CSVFIELD

Die Funktion konvertiert den Wert einer SPS-Variablen in ein Datenfeld im CSV-Format. Einfache Einführungszeichen in den Quelldaten werden durch doppelte Einführungszeichen ersetzt. Beim gesetzten bQM-Parameter (QM = quotation marks) werden auch die äußeren (das CSV-Datenfeld einschließende) Einführungszeichen hinzugefügt. Beim Erfolg liefert die Funktion die Länge der konvertierten Daten als Ergebnis zurück. Die Funktion liefert Null wenn bei der Konvertierung Fehler aufgetreten sind oder bei fehlenden Daten. Das Ergebnis wird in den bereitgestellten Bytepuffer geschrieben. Die Applikation muss dafür sorgen, dass die Puffergröße so dimensioniert ist, damit das Ergebnis dort hineinpasst.
Die Funktion wird normalerweise zusammen mit dem Funktionsbaustein FB_CSVMemBufferWriter verwendet, um Datensätze im SPS-Speicher im CSV-Format zu erzeugen. Im nächsten Schritt kann der Speicherinhalt dann in die Datei geschrieben werden. Im Gegensatz zu der STRING_TO_CSVFIELD-Funktion lassen sich mit dieser Funktion auch SPS-Variablen mit Binärdaten in CSV-Datenfelder konvertieren.
FUNCTION ARG_TO_CSVFIELD : UDINT
VAR_INPUT
in : T_Arg;
bQM : BOOL;
pOutput : DWORD;
cbOutput : UDINT;
END_VAR
in: SPS-Quellvariable deren Wert in ein Datenfeld im CSV-Format konvertiert werden soll.
bQM: Bei TRUE an diesem Eingang werden die konvertierten Felddaten in Einführungszeichen eingeschlossen.
pOutput: Anfangsadresse (Pointer) auf den Ausgangspuffer. Die Pufferadresse kann mit dem ADR-Operator ermittelt werden. In diesen Puffer werden die Ergebnisdaten hineingeschrieben.
cbOutput: Die maximal verfügbare Größe des Ausgangspuffers in Byte. Die Länge des Ausgangspuffers kann mit dem SIZEOF-Operator ermittelt werden.
Beispiel in ST:
Im folgenden Beispiel wird gezeigt wie SPS-Variablen unterschiedlichen Typs in das CSV-Format und umgekehrt konvertiert werden können. Bei der ARG_TO_CSVFIELD-Konvertierung wird das Ergebnis in den Bytepuffer hineinkopiert (field1..field6). Bei der CSVFIELD_TO_ARG-Konvertierung liegen die Quelldaten im Bytepuffer (field1..field6) und das Ergebnis wird in die TwinCAT SPS-Variable kopiert.
PROGRAM P_ArgToConvExample
VAR
(* PLC data to be converted to or from CSV format *)
bOperating : BOOL := TRUE;
fAxPos : LREAL := 12.2;
nCounter : UDINT := 7;
sName : T_MaxString := 'Module: "XAF", $04$05, 20';
binData : ARRAY[0..9] OF BYTE := 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
sShort : STRING(10) := 'XAF';
(* conversion buffer *)
field1 : ARRAY[0..50 ] OF BYTE;
field2 : ARRAY[0..50 ] OF BYTE;
field3 : ARRAY[0..50 ] OF BYTE;
field4 : ARRAY[0..50 ] OF BYTE;
field5 : ARRAY[0..50 ] OF BYTE;
field6 : ARRAY[0..50 ] OF BYTE;
cbField1 : UDINT;
cbField2 : UDINT;
cbField3 : UDINT;
cbField4 : UDINT;
cbField5 : UDINT;
cbField6 : UDINT;
cbVar1 : UDINT;
cbVar2 : UDINT;
cbVar3 : UDINT;
cbVar4 : UDINT;
cbVar5 : UDINT;
cbVar6 : UDINT;
END_VAR
cbField1 := ARG_TO_CSVFIELD( F_BOOL( bOperating ), TRUE, ADR( field1 ), SIZEOF( field1 ) );
cbField2 := ARG_TO_CSVFIELD( F_LREAL( fAxPos ), TRUE, ADR( field2 ), SIZEOF( field2 ) );
cbField3 := ARG_TO_CSVFIELD( F_UDINT( nCounter ), TRUE, ADR( field3 ), SIZEOF( field3 ) );
cbField4 := ARG_TO_CSVFIELD( F_STRING( sName ), TRUE, ADR( field4 ), SIZEOF( field4 ) );
cbField5 := ARG_TO_CSVFIELD( F_BIGTYPE( ADR( binData ), SIZEOF( binData ) ), TRUE, ADR( field5 ), SIZEOF( field5 ) );
cbField6 := ARG_TO_CSVFIELD( F_BIGTYPE( ADR( sShort ), LEN( sShort ) ), TRUE, ADR( field6 ), SIZEOF( field6 ) );
cbVar1 := CSVFIELD_TO_ARG( ADR( field1 ), cbField1, TRUE, F_BOOL( bOperating ) );
cbVar2 := CSVFIELD_TO_ARG( ADR( field2 ), cbField2, TRUE, F_LREAL( fAxPos ) );
cbVar3 := CSVFIELD_TO_ARG( ADR( field3 ), cbField3, TRUE, F_UDINT( nCounter ) );
cbVar4 := CSVFIELD_TO_ARG( ADR( field4 ), cbField4, TRUE, F_STRING( sName ) );
cbVar5 := CSVFIELD_TO_ARG( ADR( field5 ), cbField5, TRUE, F_BIGTYPE( ADR( binData ), SIZEOF( binData ) ) );
cbVar6 := CSVFIELD_TO_ARG( ADR( field6 ), cbField6, TRUE, F_BIGTYPE( ADR( sShort ), LEN( sShort ) ) );
Das Ergebnis (Bytepuffer als hexadezimaler String):
cbField1 = 3, field1 = '22 01 22'
cbField2 = 10, field2 = '22 66 66 66 66 66 66 28 40 22'
cbField3 = 6, field3 = '22 07 00 00 00 22'
cbField4 = 25, field4 = '22 4D 6F 64 75 6C 65 3A 20 22 22 58 41 46 22 22 2C 20 04 05 2C 20 32 30 22'
cbField5 = 12, field5 = '22 00 01 02 03 04 05 06 07 08 09 22'
cbField6 = 5, field6 = '22 58 41 46 22'
cbVar1 = 1
cbVar2 = 8
cbVar3 = 4
cbVar4 = 22
cbVar5 = 10
cbVar6 = 3
Weitere Informationen finden Sie hier: Beispiel: Schreiben/lesen einer CSV-Datei.
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken |
---|---|---|
TwinCAT v2.11.0 Build > 1550 | PC or CX (x86, ARM) | TcUtilities.Lib |