Diese Bibliothek bietet die Funktionen SysCallbackRegister und SysCallbackUnregister, die dazu dienen, definierte Callback-Funktionen für Laufzeitereignisse zu aktivieren.
Beide Funktionen sind vom Typ BOOL und geben TRUE zurück, sobald die gewünschte Callback-Funktion erfolgreich registriert bzw. de-registriert wurde.
Die Ausführung ist synchron.
Prototyp der Rückruffunktion
Der Prototyp der Rückruffunktion muss wie folgt aussehen:
FUNCTION Rückruf : DWORD
VAR_INPUT
dwEvent:DWORD; // Ereignis
dwFilter:DWORD; // Filter
dwOwner:DWORD; // Quelle
END_VAR
Bei RISC- und Motorola 68K-Zielsystemen muss der Name der Callback-Funktion mit "callback" beginnen!
Die Bibliotheksfunktionen SysCallbackRegister und SysCallbackUnregister verwenden jeweils die folgenden Parameter beim Aufruf der Callback-Funktion, die registriert bzw. deregistriert werden soll.
Eingangsvariable |
Datentyp |
Beschreibung |
---|---|---|
iPOUIndex |
INT |
POU Index der Callback-Funktion, die (de)registriert werden soll. Der Index muss vorher mit Hilfe des Operators INDEXOF(<Funktionsname>) beschafft werden. |
Ereignis |
RTS_EVENT |
Das Laufzeitereignis, für das die Callback-Funktion aufgerufen wird, wird durch einen Wert der Aufzählung RTS_EVENT definiert, die ebenfalls in der Bibliothek enthalten ist. |
Die Aufzählung RTS_EVENT ist wie folgt definiert:
TYP RTS_EVENT :
(
EVENT_ALL,
(* Allgemeine Ereignisse *)
EVENT_START,
EVENT_STOP,
EVENT_BEFORE_RESET,
EVENT_AFTER_RESET,
EVENT_SHUTDOWN,
(* Von der Laufzeit erzeugte Ausnahmen *)
EVENT_EXCPT_CYCLETIME_OVERFLOW, (* Überschreitung der Zykluszeit *)
EVENT_EXCPT_WATCHDOG, (* Software-Watchdog der IEC-Aufgabe ist abgelaufen *)
EVENT_EXCPT_HARDWARE_WATCHDOG, (* Hardware-Watchdog ist abgelaufen. Globaler Softwarefehler *)
EVENT_EXCPT_FIELDBUS, (* Feldbusfehler aufgetreten *)
EVENT_EXCPT_IOUPDATE, (* IO-Update-Fehler *)
(* Vom System erzeugte Ausnahmen *)
EVENT_EXCPT_ILLEGAL_INSTRUCTION, (* Unzulässige Anweisung *)
EVENT_EXCPT_ACCESS_VIOLATION, (* Zugriffsverletzung *)
EVENT_EXCPT_PRIV_INSTRUCTION, (* Privilegierte Anweisung *)
EVENT_EXCPT_IN_PAGE_ERROR, (* Seitenfehler *)
EVENT_EXCPT_STACK_OVERFLOW, (* Stapelüberlauf *)
EVENT_EXCPT_MISALIGNMENT, (* Datentypversatz *)
EVENT_EXCPT_ARRAYBOUNDS, (* ARRAY-Grenzen überschritten *)
EVENT_EXCPT_DIVIDEBYZERO, (* Division durch Null *)
EVENT_EXCPT_OVERFLOW, (* Überlauf *)
EVENT_EXCPT_NONCONTINUABLE, (* Nicht fortsetzbar *)
EVENT_EXCPT_NO_FPU_AVAILABLE, (* FPU: Keine FPU verfügbar *)
EVENT_EXCPT_FPU_ERROR, (* FPU: Nicht spezifizierter Fehler *)
EVENT_EXCPT_FPU_DENORMAL_OPERAND, (* FPU: Denormaler Operand *)
EVENT_EXCPT_FPU_DIVIDEBYZERO, (* FPU: Division durch Null *)
EVENT_EXCPT_FPU_INVALID_OPERATION, (* FPU: Ungültiger Vorgang *)
EVENT_EXCPT_FPU_OVERFLOW, (* FPU: Überlauf *)
EVENT_EXCPT_FPU_STACK_CHECK, (* FPU: Stapelprüfung *)
(* IO-Ereignisse *)
EVENT_AFTER_READING_INPUTS,
EVENT_BEFORE_WRITING_OUTPUTS,
(* Verschiedene Ereignisse *)
EVENT_TIMER, (* Zeitplan-Tick (Timer-Interrupt) *)
EVENT_DEBUG_LOOP, (* Debug-Schleife am Haltepunkt *)
(* Online-Dienste *)
EVENT_ONLINE_SERVICES_BEGIN := 500,
EVENT_LOGIN,
EVENT_CUSTOM_SERVICES,
(* Unterbrechungen *)
EVENT_INT_0:=1000,
EVENT_INT_1,
EVENT_INT_2,
EVENT_INT_3,
EVENT_INT_4,
EVENT_INT_5,
EVENT_INT_6,
EVENT_INT_7,
EVENT_INT_8,
EVENT_INT_9,
EVENT_INT_10,
EVENT_INT_11,
EVENT_INT_12,
EVENT_INT_13,
EVENT_INT_14,
EVENT_INT_15,
EVENT_INT_255:=1255,
EVENT_MAX
);
END_TYPE