ARG_TO_CSVFIELD

ARG_TO_CSVFIELD 1:

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

VAR_INPUT
    in       : T_Arg;
    bQM      : BOOL;
    pOutput  : POINTER TO BYTE;
    cbOutput : UDINT;
END_VAR

in: SPS-Quellvariable deren Wert in ein Datenfeld im CSV-Format konvertiert werden soll (Typ: T_Arg).

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:

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 (Kategoriegruppe)

TwinCAT v3.1.0

PC oder CX (x86, x64, ARM)

Tc2_Utilities (System)