FB_CSVMemBufferReader

FB_CSVMemBufferReader 1:

Mit diesem Funktionsbaustein können Datensätze die in einem externen Puffer liegen in einzelne Datenfelder zerlegt/interpretiert werden. Die Pufferdaten könnten z.B. zuerst mit Hilfe der Funktionsbausteine für den Dateizugriff aus einer Datei gelesen werden. Der Funktionsbaustein liest das erste oder das nächste Datenfeld und gibt dessen Wert entweder als String am getValue-Ausgang oder als Adresse/Bytegröße am pValue/cbValue-Ausgang zurück.

Die Daten im Puffer müssen einem bestimmten Format entsprechen damit sie von dem Funktionsbaustein richtig interpretiert werden können. Zur Trennung der Datensätze muss das Datensatztrennzeichen CRLF (CR=Carriage Return, LF=Line Feed) verwendet werden. Der letzte Datensatz muss ebenfalls mit einem CRLF abschließen. Einzelne Datenfelder müssen mit dem Datenfeldtrennzeichen getrennt worden sein. In der Standardeinstellung wird dafür das Datenfeldtrennzeichen Semikolon verwendet. Über die globale SPS-Variable DEFAULT_CSV_FIELD_SEP kann das Trennzeichen vom Semikolon auf Komma konfiguriert werden.

VAR_INPUT

VAR_INPUT
    eCmd     : E_EnumCmdType := eEnumCmd_First;
    pBuffer  : POINTER TO BYTE;
    cbBuffer : UDINT;
END_VAR

eCmd: Steuerparameter für den Pufferbaustein (Typ: E_EnumCmdType). eEnumCmd_First liest das erste Datenfeld, eEnumCmd_Next liest das nächste Datenfeld. Andere Parameterwerte werden nicht benutzt.

pBuffer: Adresse (Pointer) auf die Quellpuffervariable. Die Adresse kann mit dem ADR-Operator ermittelt werden. Dieser Puffer beinhaltet die zu lesenden Datensatz/Datenfeld-Daten.

cbBuffer: Die Bytegröße der zu interpretierenden Daten im Quellpuffer (Datensatz/Datenfeld-Daten). Die Puffergröße kann viel größer sein als die reine zu interpretierende Datenmenge. Bitte geben Sie hier nur die tatsächliche Länge der zu interpretierenden Daten an.

VAR_OUTPUT

VAR_OUTPUT
    bOk      : BOOL;
    getValue : T_MaxString := '';
    pValue   : POINTER TO BYTE := 0;
    cbValue  : UDINT := 0;
    bCRLF    : BOOL := FALSE;
    cbRead   : UDINT := 0;
END_VAR

bOk: TRUE = Success, FALSE = Fehlerhafte Daten/fehlerhafte Eingangsparameter oder wenn das Ende der Daten erreicht wurde und kein weiteres Datenfeld gelesen werden konnte.

getValue: Das zuletzt gelesene Datenfeld als String (Typ: T_MaxString). Bei Datenfeldern ohne Steuerzeichen und Binärdaten liefert dieser Ausgang das vollständige Datenfeld als Nullterminierter String. Datenfelder mit Steuerzeichen oder Binärdaten können aber an diesem Ausgang einen unvollständigen String zurückliefern. In diesem Fall werden die Ausgänge pValue/cbValue für den Zugriff auf das zuletzt gelesene Datenfeld benutzt.

pValue: Adresse (Pointer) auf das erste Datenbyte des Datenfelds. Bitte beachten Sie: Leere Datenfelder werden nicht wie bei einem SPS -String üblich mit einer Null terminiert und besitzen daher keine Daten. Die Adresse ist in diesem Fall Null.

cbValue: Datenfeldlänge in Bytes. Bitte beachten Sie: Leere Datenfelder werden nicht wie bei einem SPS-String üblich mit einer Null terminiert und besitzen daher keine Daten. Die Länge ist in diesem Fall auch Null. Die maximale Größe kann mit dem globalen Parameter cMaxCSVFieldValueSize angegeben werden.

bCRLF: Dieser Ausgang wird gesetzt, wenn beim letzten Lesebefehl das Datensatzende erreicht wurde. Das zuletzt gelesene Datenfeld gehört noch zum vorherigen Datensatz. Das nächste Datenfeld gehört dann zu einem neuen Datensatz.

cbRead: Anzahl der erfolgreich gelesenen/interpretieren Datenbytes. Diese Zahl kann größer sein als die Datenfeldlänge am cbValue-Ausgang. Die Länge am cbRead-Ausgang beinhaltet auch die interpretierten Datenfeld-/Datensatztrennzeichen.

Beispiel:

Siehe: 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)