捕获用户输入事件
您可以在应用程序中捕获用户输入事件。为此,您可以实现一个在用户事件发生时执行的功能块。
捕获变量的写入
当用户完成输入值(在输入字段中)时,编辑控件事件将关闭。您可以在应用程序中按如下方式捕获此事件。
创建实现接口的功能块
VisuElems.IEditBoxInputHandler从图书馆VisuElemBase。将实例传递给全局事件管理器
VisuElems.Visu_Globals.g_VisuEventManager通过调用方法SetEditBoxEventHandler。
可视化有两个输入字段,用于iInput_A和rInput_B和一个文本输出元素。
输入字段是矩形,提示用户单击以输入文本。
文本输出元素是一个矩形,其中文本变量的内容PLC_PRG.stInfo被打印出来。文本变量包含用户在某个输入字段中最后输入的内容以及添加的附加信息。

矩形的属性 | |
| |
| |
矩形的属性 | |
| |
| |
文本输出矩形的属性 | |
| |
| |
实施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 实施POU
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IEditBoxInputHandler (* no further declarations, no implementation code *)
方法VariableWritten分配给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')); 捕获键盘事件
当用户按下并释放按键时,可视化中会触发键盘事件。您可以按如下方式在应用程序中捕获此事件。
创建实现接口的功能块
VisuElems.IKeyEventHandler从图书馆VisuElemBase。将实例传递给全局事件管理器
VisuElems.Visu_Globals.g_VisuEventManager通过调用方法SetKeyEventHandler。
可视化包含一个文本输出元素。文本输出元素是一个矩形,其中显示文本变量的内容PLC_PRG.stInfo被打印出来。文本变量包含有关用户最后按下的键的信息。
文本输出矩形的属性 | |
| |
| |
计划实施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 功能块的实现POU
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IKeyEventHandler
(* no further declarations, no implementation code *)
方法的实现VariableWritten功能块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'));
记录输入事件触发的变量值变化
所有通过用户输入改变变量值的可视化元素都会调用该接口IValueChangedListener通过此接口,可以记录值的变化,然后通过编程进行处理。
实现功能块(例如:
POU) 实现接口IValueChangedListener。FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IValueChangedListener在设备树中,值改变方法插入功能块下方。
在一个程序中(例如: PLC程序 ),实现注册接口的IEC代码。
VisuElems.g_itfValueChangedListenerManager.AddValueChangedListener(itfValueChangedListener)PLC程序通过获取所有值的变化值改变方法。
现在您可以记录和处理值的变化。
使用输入选项捕获元素上的输入
当用户点击一个对输入做出反应的元素(例如,具有输入配置的矩形)时,会引发一个事件。您可以按如下方式在应用程序中捕获此事件。
创建实现接口的功能块
VisuElems.IInputOnElementEventHandler从图书馆VisuElemBase。将实例传递给全局事件管理器
VisuElems.Visu_Globals.g_VisuEventManager通过调用方法SetInputOnElementEventHandler。
可视化效果中有一个矩形框,用于响应输入。例如,变量的切换已配置为OnMouseDown。当元素被鼠标或触摸输入点击时,事件HandleInputOnElementEvent被提出。
函数的实现VisuInit
FUNCTION VisuInit : BOOL // Set the input on element event handler VisuElems.VisuElemBase.g_VisuEventManager.SetInputOnElementEventHandler(PLC_PRG.evInputOnElementEventHandler);
功能块的实现POU
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.VisuElemBase.IInputOnElementEventHandler (* no further declarations, no implementation code *)
方法的实现HandleInputOnElementEvent功能块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) *)
