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
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 |
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 |