Fehlerauswertung
Über den Interface-Pointer ipResultMessage vom Typ I_TcMessage werden Informationen zu einem aktuellen Ereignis (Laufzeitmeldung) bereitgestellt. Es folgen die wichtigsten Methoden und Eigenschaften:
Methoden
Name | Beschreibung |
---|---|
EqualsToEventEntryEx | Vergleicht die Ereignisdefinition des Ereignisses mit einer anderen Ereignisdefinition. |
RequestEventText | Liefert den Text zum Ereignis. |
Eigenschaften
Name | Typ | Beschreibung |
---|---|---|
eSeverity | TcEventSeverity | Liefert die Severity. |
EventClass | GUID | Liefert die eindeutige ID der Ereignisklasse. |
nEventId | UDINT | Liefert die ID des Ereignisses. |
stEventEntry | TcEventEntry | Liefert die Ereignisdefinition. |
Details zu dem Interface I_TCMessage finden Sie in der Dokumentation zu der Tc3_EventLogger-Bibliothek.
Jedes Ereignis wird eindeutig durch die Struktur TcEventEntry beschrieben. Diese enthält drei Struktur-Elemente:
- Event-Class
- Event-ID
- Event-Severity
Mehrere Ereignisse werden in eine Event-Class zusammengelegt. So kann z.B. in der Event-Class für DALI, und in der Event-Class für EnOcean die Event-ID 100 enthalten sein. Die vollständige Beschreibung eines Ereignisses besteht immer aus der Event-Class und der Event-ID. Doppeldeutigkeiten aufgrund von gleichen IDs innerhalb verschiedener Libraries werden somit vermieden.
Um die Ereignisse der SPS zugänglich zu machen, legt TwinCAT im Typsystem für jede Event-Class automatisch eine Struktur an.

Dieses geschieht für alle SPS-Bibliotheken, die in dem Projekt referenziert werden. Über die Tc3_DALI-Bibliothek wird die Struktur ST_DALIEventClass hinzugefügt.

Diese Struktur enthält alle Ereignisse der Event-Class für die Tc3_DALI-Bibliothek. Dabei wird jedes Element der Struktur durch eine Variable vom Typ TcEventEntry abgebildet. Der Name des Elements gibt Aufschluss über die Bedeutung des Ereignisses.
TYPE ST_TcDALIEventClass:
STRUCT
NoResponseFromDALITerminal: TcEventEntry := ( …
NoResponseFromDALIDevice: TcEventEntry := ( …
CommandBufferOverflow: TcEventEntry := ( …
[…]
END_STRUCT
END_TYPE
Alle Event-Classes sind wiederum in der globalen Variablenliste TC_Events abgelegt, die ebenfalls von TwinCAT automatisch erzeugt wird.
VAR_GLOBAL CONSTANT
[…]
TcRTimeEventClass: ST_TcRTimeEventClass;
Win32EventClass: ST_Win32EventClass;
TcDALIEventClass: ST_TcDALIEventClass;
END_VAR
Somit stehen im SPS-Programm alle Meldungen aller Event-Classes zur Verfügung.
FAQ
Wie kann ich abfragen, ob ein FB einen Fehler zurückliefert?
In allen Bibliotheken ist die Event-ID für eine fehlerfreie Ausführung mit 0 fest vorgegeben. Da die Event-ID nicht nur Fehler, sondern auch Hinweise und Warnungen ausgibt, besitzen die meisten Bausteine den Ausgang bError. Dieser Ausgang ist TRUE, sobald ein Fehler vorliegt.
IF (fbDALI.bError) THEN
…
END_IF
Bei Warnungen oder Hinweisen bleibt dieser Ausgang FALSE. Daher kann es vorkommen das die Event-ID (fbDALI.ipResultMessage.nEventID) ungleich 0 ist, bError aber FALSE bleibt.
Wie kann ich abfragen, ob ein FB ein bestimmtes Ereignis zurückliefert?
Die Methode
ipResultMessage.EqualsToEventEntryEx(stOther TcEventEntry)
vergleicht ob das Ereignis gleich dem übergebenen Ereignis stOther entspricht. Da es automatisch für jedes Ereignis eine Variable vom Typ TcEventEntry gibt, kann die Abfrage auf ein bestimmtes Ereignis wie folgt durchgeführt werden.
IF (fbDALI.ipResultMessage.EqualsToEventEntryEx(
TC_EVENTS.TcDALIEventClass.NoResponseFromTheDALIDevice)) THEN
…
END_IF
Alternativ kann auch die Event-ID direkt abgefragt werden.
IF (fbDALI.ipResultMessage.nEventId = 2) THEN
…
END_IF
Für jedes Ereignis existiert eine Struktur vom Datentyp TcEventEntry. Diese befindet sich innerhalb der Struktur TcDALIEventClass (Datentyp ST_TcDALIEventClass). Aus den Namen der einzelnen Ereignisse ist auch die Bedeutung der Meldung erkennbar. Somit kann durch die Verwendung dieser Struktur die Lesbarkeit des SPS-Programms verbessert werden:
IF (fbDALI.ipResultMessage.nEventId =
TC_EVENTS.TcDALIEventClass.NoResponseFromTheDALIDevice.nEventId) then
…
END_IF
Eine Auflistung aller Ereignisse, die einen Fehler darstellen finden Sie unter Laufzeitmeldungen.
Wie kann ich den Text eines Ereignisses abfragen?
Der Text, der im Fenster TwinCAT Logged Events ausgegeben wird, kann auch im SPS-Programm mit der Methode
ipResultMessage.RequestEventText(nLangId DINT, sResult REFERENCE TO STRING, nResultSize UDINT)
abgefragt werden.
Liegt ein Ereignis an, dann liefert das folgende Beispiel den Ereignis-Text:
sTxt : STRING(255);
sEventText : STRING(255);
IF (fbDALI.ipResultMessage.RequestEventText(1031, sTxt, SIZEOF(sTxt))) THEN
UTF8_TO_STRING(ADR(sEventText), ADR(sTxt), SIZEOF(sTxt));
END_IF
Der erste Parameter gibt die Sprache vor, in der der Text ausgelesen werden soll. Die Tc3_DALI-Bibliothek enthält alle Texte in Englisch (1033) und Deutsch (1031).