Skip to main content

Meccanismo di eventi

Il sistema di runtime utilizza gli "eventi" per comunicare eventi come l'avvio/arresto/ripristino del PLC, il verificarsi di un'eccezione e così via. Con il "meccanismo degli eventi" è possibile ricevere un messaggio non appena viene attivato un evento selezionato.

Vengono inoltrati i seguenti eventi relativi all'applicazione:

  • EVT_StartDone

  • EVT_StopDone

  • EVT_ResetDone

  • EVT_ExitDone

  • EVT_AllBootprojectsLoaded

  • EVT_CmpApp_Exception

  • EVT_StateChanged

  • EVT_CmpDevice_InteractiveLogin

  • EVT_CmpMgr_LicenseState

  • SysGraphic_EVT_OpenKeyboard

  • SysGraphic_EVT_CloseKeyboard

Il consegnato uds_events.py campione fornisce il CODESYS_EventHandler classe che implementa la registrazione a un evento.

Questa classe ha bisogno del eventid così come il componentid of dell'evento da registrare, che vengono archiviati nel liEvents elenco:

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),
    "SysGraphic_EVT_OpenKeyboard" : (0x00000142, 0x00010000 + 1),
    "SysGraphic_EVT_CloseKeyboard" : (0x00000142, 0x00010000 + 2,
}

Inoltre, deve essere specificata una funzione di callback che verrà chiamata quando si verifica l'evento:

def callbackfunction_start(componentid, eventid):
    print("Start event occured")

Entro Main, un evento viene registrato come segue e viene specificata la funzione di callback necessaria:

componentid, eventid = liEvents["CmpApp_EVT_StartDone"]
myEventHandler_Start = CODESYS_EventHandler(componentid, eventid, callbackfunction_start)
myEventHandler_Start.start()

Ora la funzione di richiamata callbackfunction_start viene chiamato non appena il sistema di runtime passa a Start.

Utilizzando l'esempio fornito che registra il EVT_CmpDevice_InteractiveLogin evento, può essere attivato un occhiolino nel CODESYS finestra di dialogo di sviluppo e l'evento corrispondente viene inoltrato allo script di esempio. Se questo evento non è registrato, viene visualizzato il consueto messaggio di errore «PLC Wink failed

Quando il EVT_CmpDevice_InteractiveLogin l'evento viene registrato come nell'esempio, il segnale wink viene inoltrato allo script Python e gli utenti possono implementare le proprie funzionalità al riguardo. L'esempio emette semplicemente il messaggio «PLC Wink

Le CmpApp_EVT_StateChanged event può essere utilizzato per implementare un LED di stato. Questo evento invia un messaggio che contiene il nome dell'applicazione e lo stato dell'applicazione (RUN), STOP, ecc.). L'esempio fornito restituisce il nome dell'applicazione e lo stato corrente dell'applicazione. «Applicazione: Stato dell'applicazione: STOP

Importante

Questo evento viene inviato solo in caso di cambio di stato. Pertanto, quando lo script Python di esempio viene avviato dopo l'applicazione PLC, lo stato iniziale è sconosciuto

Il meccanismo sottostante è mostrato nella figura seguente:

_rtslex_img_eventmechanism.png

Utilizzo dell'interfaccia solo come membro di Linux codesysuser gruppo di utenti

Separazione del processo