Eventmechanismus
Das Laufzeitsystem verwendet „Events“, um Ereignisse wie den Start/Stopp/Reset der SPS, das Auftreten einer Exception etc. mitzuteilen. Mit dem „Eventmechanismus“ ist es möglich, eine Nachricht zu erhalten, sobald ein ausgewähltes Ereignis ausgelöst wurde.
Folgende applikationsbezogene Events werden weitergeleitet:
EVT_StartDone
EVT_StopDone
EVT_ResetDone
EVT_ExitDone
EVT_AllBootprojectsLoaded
EVT_CmpApp_Exception
EVT_StateChanged
EVT_CmpDevice_InteractiveLogin
EVT_CmpMgr_LicenseState
Das mitgelieferte Beispiel uds_events.py
bietet die Klasse CODESYS_EventHandler
, welche das Registrieren auf ein Ereignis implementiert.
Diese Klasse benötigt die eventid
sowie die componentid
des zu registrierenden Ereignisses, welche in der Liste liEvents
hinterlegt sind:
liEvents = { "CmpApp_EVT_StartDone" : (0x00000002, 0x10000 + 2), "CmpApp_EVT_StopDone" : (0x00000002, 0x10000 + 4), "CmpApp_EVT_ResetDone" : (0x00000002, 0x10000 + 6), "CmpApp_EVT_ExitDone" : (0x00000002, 0x10000 + 15), "CmpApp_EVT_AllBootprojectsLoaded" : (0x00000002, 0x10000 + 25), "CmpApp_EVT_CmpApp_Exception" : (0x00000002, 0x00080000 + 28), "CmpApp_EVT_StateChanged" : (0x00000002,0x10000 + 43), "CmpDevice_EVT_CmpDevice_InteractiveLogin" : (0x0000000E, 0x00010000+ 1), "CmpMgr_EVT_LicenseState" : (0x00000001, 0x00010000 + 9) }
Außerdem muss eine Callback-Funktion angegeben werden, die beim Eintreffen des Ereignisses aufgerufen wird:
def callbackfunction_start(componentid, eventid): print("Start event occured")
Innerhalb von Main
wird wie folgt auf ein Ereignis registriert und die nötige Callback-Funktion angegeben:
componentid, eventid = liEvents["CmpApp_EVT_StartDone"] myEventHandler_Start = CODESYS_EventHandler(componentid, eventid, callbackfunction_start) myEventHandler_Start.start()
Nun wird die Callback-Funktion callbackfunction_start
aufgerufen, sobald das Laufzeitsystem in Start gewechselt hat.
Der zugrundeliegende Mechanismus ist in der folgenden Abbildung gezeigt:

Verwendung der Schnittstelle nur als Mitglied der Linux-Benutzergruppe | JA |
Prozesstrennung | JA |