Skip to main content

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:

_rtslex_img_eventmechanism.png

Verwendung der Schnittstelle nur als Mitglied der Linux-Benutzergruppe codesysuser

JA

Prozesstrennung

JA