Unterstützung des Tc3_Eventlogger
Der TwinCAT 3 Database Server unterstützt den TwinCAT 3 Eventlogger (TwinCAT 3 Version 4022.20). Dieser ermöglicht es über ein Interface, Details zu Ereignissen der Bausteine auszulesen. Weitere Informationen zum Eventlogger finden Sie in den TwinCAT 3 Basis Bibliotheken.
Alle Funktionsbausteine des TwinCAT 3 Database Servers unterstützen das Interface des Tc3 Eventloggers. Dazu wird als Rückgabewert der Bausteine das Interface Tc3_Eventlogger.I_TcMessage verwendet. Zusätzlich zum Rückgabewert, steht die Eigenschaft eTraceLevel zur Verfügung, um die Ereignisgewichtung zu bestimmen.
Eigenschaften
Name | Typ | Zugriff | Beschreibung |
---|---|---|---|
eTraceLevel | Get, Set | Gibt die Gewichtung der Ereignisse an. Nur Ereignisse über diesem Wert werden an das TwinCAT System gesendet. |
Beispiel:
Bei einem exemplarischen Funktionsbaustein FB_PLCDBWrite geben wir folgende Gewichtung an:
fbPLCDBWriteEvt.eTraceLevel := TcEventSeverity.Warning;
Hier werden nun alle Ereignisse gesendet, welche mindestens eine Warnung darstellen. Ereignisse der Gewichtung „Information” werden in diesem Fall ignoriert.
Die Tc3_Database Funktionsbausteine selbst haben als Ausgang ipTcResult vom Datentyp Tc3_Eventlogger.I_TcMessage. Alle angebotenen Funktionen dieses Interfaces können genutzt werden.
In diesem Beispiel wird zunächst der Baustein aufgerufen.
1: // Call Functionblock
IF fbPLCDBWriteEvt.WriteStruct(
hDBID:= 1,
sTableName:= 'myTable_Struct',
pRecord:= ADR(myRecord),
cbRecord:= SIZEOF(myRecord),
pColumnNames:= ADR(ColumnNames) ,
cbColumnNames:= SIZEOF(ColumnNames))
THEN
IF fbPLCDBWriteEvt.bError THEN
myTcMessage := fbPLCDBWriteEvt.ipTcResult
nState := 255;
ELSE
nState := 0;
END_IF
END_IF
Im Fehlerfall möchten wir nun den Eventtext in der Laufzeitumgebung anfordern. Hierzu kann die Methode RequestEventText verwendet werden. Mit der nLangId =1031 wird der Fehlercode in deutscher Sprache ausgelesen. Dies ist eine der vielen Funktionen der Schnittstelle Schnittstelle Tc3_Eventlogger.I_TcMessage.
255://Request EventText
IF myTcMessage.RequestEventText(1031,
ADR(MyEventString),
SIZEOF(MyEventString))THEN
nState := 0;
END_IF