WriteStruct

Diese Methode erzeugt einen Datensatz mit einer beliebigen Tabellenstruktur.

Syntax

METHOD WriteStruct : BOOL
VAR_INPUT
    hDBID: UDINT;
    sTableName: T_MaxString;
    pRecord: POINTER TO BYTE;
    cbRecord: UDINT;
    pColumnNames: POINTER TO ARRAY [0..MAX_DBCOLUMNS] OF STRING(50);
    cbColumnNames: UDINT;
END_VAR

WriteStruct 1: Eingänge

Name

Typ

Beschreibung

hDBID

UDINT

Gibt die ID der zu verwendenden Datenbank an.

sTableName

T_MaxString

Name der Tabelle, aus der gelesen werden soll.

pRecord

POINTER TO BYTE

Adresse einer Struktur, die in eine beliebige Tabellenstruktur geloggt werden soll.

cbRecord

UDINT

Länge der zu schreibenden Struktur

pColumnNames

POINTER TO ARRAY [0..MAX_DBCOLUMNS] OF STRING(50)

Adresse des Arrays, welches die zu füllenden Spaltennamen beinhaltet.

cbColumnNames

UDINT

Länge des Spaltennamen-Arrays

WriteStruct 2: Rückgabewert

Name

Typ

Beschreibung

WriteStruct

BOOL

Zeigt den Status der Methode. Liefert TRUE, sobald die Methodenausführung beendet ist, also auch im Fehlerfall.

Beispiel

Dieses Beispiel zeigt die Verwendung der Methode FB_PLCDBWriteEvt.WriteStruct:

VAR
    fbPLCDBWrite    :  FB_PLCDBWriteEvt(sNetID := '', tTimeout := T#5S);
    myRecord        :  ST_Record;
    ColumnNames     :  ARRAY[0..4] OF STRING(50);
    
    systime         :  GETSYSTEMTIME;
    currentTime     :  T_FILETIME;
    tcMessage       :  I_TcMessage;
END_VAR
TYPE ST_Record :
STRUCT
    nID        : LINT;
    dtTimestamp: DATE_AND_TIME;
    sName      : STRING;
    nSensor1   : LREAL;
    nSensor2   : LREAL;
END_STRUCT
END_TYPE
// set Values
systime(timeLoDw => currentTime.dwLowDateTime, timeHiDW => currentTime.dwHighDateTime );
myRecord.dtTimestamp := FILETIME_TO_DT(currentTime);
myRecord.sName       := 'MyStructVal';
myRecord.nSensor1    := 12.34;
myRecord.nSensor2    := 102.5;

// set columnnames
ColumnNames[0] := 'ID';
ColumnNames[1] := 'Timestamp';
ColumnNames[2] := 'Name';
ColumnNames[3] := 'Sensor1';
ColumnNames[4] := 'Sensor2';

// Call Functionblock
IF fbPLCDBWrite.WriteStruct(
    hDBID:= 1, 
    sTableName:= 'myTable_Struct', 
    pRecord:= ADR(myRecord), 
    cbRecord:= SIZEOF(myRecord), 
    pColumnNames:= ADR(ColumnNames) , 
    cbColumnNames:= SIZEOF(ColumnNames))
THEN
    IF fbPLCDBWrite.bError THEN
        tcMessage := fbPLCDBWrite.ipTcResult;
        nState := 255; 
    ELSE
        nState := 0;
    END_IF
END_IF

Ergebnis in der Datenbank:

ID

Timestamp

Name

Sensor1

Sensor2

5

'2018-01-30 15:23:26'

‘MyStructVal’

12.34

102.5