Mecanismo de eventos
El sistema de tiempo de ejecución utiliza "eventos" para comunicar eventos como el inicio/parada/reinicio del PLC, la aparición de una excepción, etc. Con el "mecanismo de eventos", es posible recibir un mensaje tan pronto como se haya activado un evento seleccionado.
Se reenvían los siguientes eventos relacionados con la aplicación:
EVT_StartDoneEVT_StopDoneEVT_ResetDoneEVT_ExitDoneEVT_AllBootprojectsLoadedEVT_CmpApp_ExceptionEVT_StateChangedEVT_CmpDevice_InteractiveLoginEVT_CmpMgr_LicenseStateSysGraphic_EVT_OpenKeyboardSysGraphic_EVT_CloseKeyboard
el entregado uds_events.py muestra proporciona la CODESYS_EventHandler clase que implementa el registro a un evento.
Esta clase necesita la eventid así como el componentid of del evento a registrar, que se almacenan en el liEvents lista:
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,
}Además, se debe especificar una función de devolución de llamada que se llamará cuando ocurra el evento:
def callbackfunction_start(componentid, eventid):
print("Start event occured")Dentro Main, se registra un evento de la siguiente manera y se especifica la función de devolución de llamada necesaria:
componentid, eventid = liEvents["CmpApp_EVT_StartDone"] myEventHandler_Start = CODESYS_EventHandler(componentid, eventid, callbackfunction_start) myEventHandler_Start.start()
Ahora la función de devolución de llamada callbackfunction_start se llama tan pronto como el sistema de tiempo de ejecución ha cambiado a Inicio.
Utilizando el ejemplo proporcionado que registra el EVT_CmpDevice_InteractiveLogin En este caso, se puede activar un guiño en el CODESYS el cuadro de diálogo de desarrollo y el evento correspondiente se reenvían al script de muestra. Si este evento no está registrado, aparecerá el mensaje de error habitual «PLC Wink failed».
Cuando el EVT_CmpDevice_InteractiveLogin el evento se registra como en el ejemplo, la señal de guiño se reenvía al script de Python y los usuarios pueden implementar su propia funcionalidad para ello. El ejemplo simplemente muestra el mensaje «Se ha producido un error en el PLC».
El CmpApp_EVT_StateChanged el evento se puede usar para implementar un LED de estado. Este evento envía un mensaje que contiene el nombre y el estado de la aplicación (RUN), STOP, etc.). El ejemplo proporcionado muestra el nombre de la aplicación y el estado actual de la aplicación. «Aplicación: Estado de la solicitud: DETENER»
Importante
Este evento se envía solo en caso de un cambio de estado. Por lo tanto, cuando el script de Python de ejemplo se inicia después de la aplicación de PLC, se desconoce el estado inicial.
El mecanismo subyacente se muestra en la siguiente figura:

Uso de la interfaz solo como miembro de Linux | sí |
Separación de procesos | sí |