You can capture user input events in the application. For this purpose, you can implement a function block that is executed when user events occur.
Capturing the writing of variables
When the user completes the input of a value (in an input field), an edit control event is closed. You can capture this event in the application as follows.
-
Create a function block that implements the
VisuElems.IEditBoxInputHandler
interface from theVisuElemBase
library. -
Pass the instance to the global event manager
VisuElems.Visu_Globals.g_VisuEventManager
by calling theSetEditBoxEventHandler
method.
Example
A visualization has two input fields for iInput_A
and rInput_B
and one text output element.
The input fields are rectangles that the user is prompted to click in order to input text.
The text output element is a rectangle where the contents of the text variable PLC_PRG.stInfo
are printed. The text variable contains the last input by a user in one of the input
fields and the additional information that was added.

Properties of the rectangle |
|
“Texts Text” |
|
“Text variables Text variable” |
PLC_PRG.iInput_A |
Properties of the rectangle |
|
“Texts Text” |
|
“Text variables Text variable” |
PLC_PRG.rInput_B |
Properties of the rectangle for the text output |
|
“Texts Text” |
|
“Text variables Text variable” |
PLC_PRG.stInfo |
PLC_PRG
implementation
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
POU
implementation
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IEditBoxInputHandler (* no further declarations, no implementation code *)
Method VariableWritten
assigned to 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'));
Capturing keyboard events
When the user presses and releases the key, a keyboard event is triggered in the visualization. You can capture this event in the application as follows.
-
Create a function block that implements
VisuElems.IVisuUserEventManager
from theVisuElemBase
library. -
Pass the instance to the global event manager
VisuElems.Visu_Globals.g_VisuEventManager
by calling theSetKeyEventHandler
method.
Example
A visualization has one text output element. The text output element is a rectangle
where the contents of the text variable PLC_PRG.stInfo
are printed. The text variable contains information about the last key pressed by
the user.
Properties of the rectangle for the text output |
|
“Texts Text” |
|
“Text variables Text variable” |
PLC_PRG.stInfo |
Implementation of the PLC_PRG
program
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
Implementation of the POU
function block
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IKeyEventHandler (* no further declarations, no implementation code *)
Implementation of the VariableWritten
method of the POU
function block
/// 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'));
Recording variable value changes triggered by input events
All visualization elements that change the value of a variable by user input call
the IValueChangedListener
interface. With this interface, the value changes can be recorded and then processed
programmatically.
-
Implement a function block (example:
POU
) that implements theIValueChangedListener
interface.FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IValueChangedListener
In the device tree, the “ValueChanged” method is inserted below the function block.
-
In a program (example: “PLC_PRG”), implement the IEC code that registers the interface.
VisuElems.g_itfValueChangedListenerManager.AddValueChangedListener(itfValueChangedListener)
“PLC_PRG” receives all value changes by means of the “ValueChanged” method.
Now you can record and process the value changes.