Captura de eventos de entrada del usuario
Puede capturar eventos de entrada del usuario en la aplicación. Para ello, puede implementar un bloque de función que se ejecute cuando se produzcan eventos de usuario.
Aviso
Proyecto de muestra para capturar cambios de variables mediante la entrada del usuario
El proyecto de ejemplo registra los cambios en los valores de las variables activados por la entrada del usuario dentro de la visualización. En este proyecto, también encontrará la implementación del método. ValueChanged
.
Capturando la escritura de variables
Cuando el usuario completa la entrada de un valor (en un campo de entrada), se cierra un evento de control de edición. Puede capturar este evento en la aplicación de la siguiente manera.
Crea un bloque de funciones que implementa la interfaz
VisuElems.IEditBoxInputHandler
de la bibliotecaVisuElemBase
.Pasar la instancia al administrador de eventos global
VisuElems.Visu_Globals.g_VisuEventManager
llamando al métodoSetEditBoxEventHandler
.
Una visualización tiene dos campos de entrada para iInput_A
y rInput_B
y un elemento de salida de texto.
Los campos de entrada son rectángulos en los que se le pide al usuario que haga clic para ingresar texto.
El elemento de salida de texto es un rectángulo donde se guarda el contenido de la variable de texto. PLC_PRG.stInfo
Se imprimen. La variable de texto contiene la última entrada del usuario en uno de los campos de entrada y la información adicional añadida.

Propiedades del rectángulo | |
| |
| |
Propiedades del rectángulo | |
| |
| |
Propiedades del rectángulo para la salida de texto | |
| |
|
Implementación de PLC_PRG
PROGRAM PLC_PRG VAR_INPUT iInput_A:INT; (* Used in the visualization as user input variable*) rInput_B:REAL; (* Used in the visualization as user input variable*) stInfo : STRING; (* Informs about the user input via the edit control field; String gets composed by method 'VariableWritten; Result is displayed in the lower rectangle of the visualization *) END_VAR VAR inst : POU; bFirst : BOOL := TRUE; END_VAR IF bFirst THEN bFirst := FALSE; VisuElems.Visu_Globals.g_VisuEventManager.SetEditBoxEventHandler(inst); (* Call of method VariableWritten *) END_IF
Implementación de POU
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IEditBoxInputHandler (* no further declarations, no implementation code *)
Método VariableWritten
asignado a POU
METHOD VariableWritten : BOOL (* provides some information always when an edit control field is closed in the visualization, that is a variable gets written by user input in one of the upper rectangles *) VAR_INPUT pVar : POINTER TO BYTE; varType : VisuElems.Visu_Types; iMaxSize : INT; pClient : POINTER TO VisuElems.VisuStructClientData; END_VAR // String stInfo, which will be displayed in the lower rectangle, is composed here PLC_PRG.stInfo := 'Variable written; type: '; PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, INT_TO_STRING(varType)); PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, ', adr: '); PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, DWORD_TO_STRING(pVar)); PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, ', by: '); PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, SEL(pClient^.globaldata.clienttype = VisuElems.Visu_ClientType.Targetvisualization,'other visu', 'targetvisu'));
Captura de eventos del teclado
Cuando el usuario presiona y suelta la tecla, se genera un evento de teclado en la visualización. Puede capturar este evento en la aplicación de la siguiente manera.
Crea un bloque de funciones que implementa la interfaz
VisuElems.IKeyEventHandler
de la bibliotecaVisuElemBase
.Pasar la instancia al administrador de eventos global
VisuElems.Visu_Globals.g_VisuEventManager
llamando al métodoSetKeyEventHandler
.
Una visualización tiene un elemento de salida de texto. Este elemento es un rectángulo donde se almacena el contenido de la variable de texto. PLC_PRG.stInfo
Se imprimen. La variable de texto contiene información sobre la última tecla pulsada por el usuario.
Propiedades del rectángulo para la salida de texto | |
| |
|
Implementación del programa PLC_PRG
PROGRAM PLC_PRG VAR_INPUT stInfo : STRING; END_VAR VAR inst : POU; bFirst : BOOL := TRUE; END_VAR IF bFirst THEN bFirst := FALSE; VisuElems.Visu_Globals.g_VisuEventManager.SetKeyEventHandler(inst); END_IF
Implementación del bloque de funciones POU
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IKeyEventHandler (* no further declarations, no implementation code *)
Implementación del método VariableWritten
del bloque de función POU
/// This method will be called after a key event is released. /// RETURN: /// TRUE - When the handler has handled this event and it should not be handled by someone else /// FALSE - When the event is not handled by this handler METHOD HandleKeyEvent : BOOL VAR_INPUT /// Event type. The value is true if a key-up event was released. bKeyUpEvent : BOOL; /// Key code dwKey : DWORD; /// Modifier. Possible values: /// VISU_KEYMOD_SHIFT : DWORD := 1; /// VISU_KEYMOD_ALT : DWORD := 2; /// VISU_KEYMOD_CTRL : DWORD := 4; dwModifiers : DWORD; /// Pointer to the client structure were the event was released pClient : POINTER TO VisuStructClientData; END_VAR VAR END_VAR PLC_PRG.stInfo := 'KeyEvent up: '; PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, BOOL_TO_STRING(bKeyUpEvent)); PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, ', key: '); PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, DWORD_TO_STRING(dwKey)); PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, ', modifier: '); PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, DWORD_TO_STRING(dwModifiers)); PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, ', by: '); PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, SEL(pClient^.globaldata.clienttype = VisuElems.Visu_ClientType.Targetvisualization,'other visu', 'targetvisu'));
Registro de cambios de valores variables provocados por eventos de entrada
Todos los elementos de visualización que cambian el valor de una variable mediante la entrada del usuario llaman a la interfaz IValueChangedListener
Con esta interfaz, los cambios de valor se pueden registrar y luego procesar mediante programación.
Aviso
Proyecto de muestra para capturar cambios de variables mediante la entrada del usuario
El proyecto de ejemplo registra los cambios en los valores de las variables activados por la entrada del usuario dentro de la visualización. En este proyecto, también encontrará la implementación del método. ValueChanged
.
Implementar un bloque de función (ejemplo:
POU
) que implementa la interfazIValueChangedListener
.FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IValueChangedListener
En el árbol de dispositivos, el Valor modificado El método se inserta debajo del bloque de función.
En un programa (ejemplo: PLC_PRG), implementa el código IEC que registra la interfaz.
VisuElems.g_itfValueChangedListenerManager.AddValueChangedListener(itfValueChangedListener)
PLC_PRG Obtiene todos los cambios de valor por medio de Valor modificado método.
Ahora puede registrar y procesar los cambios de valor.
Captura de entradas en elementos con opciones de entrada
Cuando un usuario hace clic en un elemento que reacciona a la entrada (por ejemplo, un rectángulo con una configuración de entrada), se genera un evento. Puede capturar este evento en la aplicación de la siguiente manera.
Crea un bloque de funciones que implementa la interfaz
VisuElems.IInputOnElementEventHandler
de la bibliotecaVisuElemBase
.Pasar la instancia al administrador de eventos global
VisuElems.Visu_Globals.g_VisuEventManager
llamando al métodoSetInputOnElementEventHandler
.
Una visualización tiene un rectángulo que reacciona a la entrada. Por ejemplo, la alternancia de una variable se ha configurado con OnMouseDown
Cuando se hace clic en el elemento con el mouse o mediante una entrada táctil, se produce un evento HandleInputOnElementEvent
se eleva.
Implementación de la función VisuInit
FUNCTION VisuInit : BOOL // Set the input on element event handler VisuElems.VisuElemBase.g_VisuEventManager.SetInputOnElementEventHandler(PLC_PRG.evInputOnElementEventHandler);
Implementación del bloque de funciones POU
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.VisuElemBase.IInputOnElementEventHandler (* no further declarations, no implementation code *)
Implementación del método HandleInputOnElementEvent
del bloque de función POU
(* This method will be called when an input on a visualization element was executed. RETURN: TRUE - When the handler has handled this event and it should not be handled by someone else FALSE - When the event is not handled by this handler*) METHOD HandleInputOnElementEvent : BOOL VAR_INPUT event : VisuElems.VisuStructInputOnElementEvent; END_VAR IF event.eType = VisuElems.VisuEnumInputOnElementType.MouseDown THEN SysProcessExecuteCommand('python D:\Beep.py', 0); END_IF
(* Content Beep.py: import winsound freq=500 duration=200 winsound.Beep(freq,duration) *)