包含一个接口(例如:“IKeyEventHandler”)
要求
- 创建一个“标准项目”并选择 CODESYS Control Win V3 作为设备。
- 向应用程序添加“可视化”。 “可视化管理器”会自动添加到项目中。 将库“VisuElemBase”添加为“库管理器”中的顶级库。

- 通过网络扫描连接目标系统。

创建事件处理程序
- 创建一个名为“EventHandler”的新 FB,并实现接口“IKeyEventHandler”。 “HandleKeyEvent”方法是使用FB自动创建的:


- 将类型为“UDINT”的输出变量添加到事件处理程序:
声明
FUNCTION_BLOCK EventHandler IMPLEMENTS IKeyEventHandler
VAR_INPUT
END_VAR
VAR_OUTPUT
udiKeyDownCount : UDINT;
END_VAR
VAR
END_VAR
- 编辑方法“HandleKeyEvent”,以便仅在按下某个键时递增计数器:
声明
{warning 'add method implementation '}
(* 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
(* The event type. The value is true if a key up event was released.*)
bKeyUpEvent : BOOL;
(* The key code*)
dwKey : DWORD;
(* The modifiers. Possible values are:
VISU_KEYMOD_SHIFT : DWORD := 1;
VISU_KEYMOD_ALT : DWORD := 2;
VISU_KEYMOD_CTRL : DWORD := 4;*)
dwModifiers : DWORD;
(* A pointer to the client structure were tje event was released*)
pClient : POINTER TO VisuStructClientData;
END_VAR
实现
IF bKeyUpEvent THEN
THIS^.udiKeyDownCount := THIS^.udiKeyDownCount + 1;
END_IF
实例化事件处理程序
- 在 PLC_PRG 中创建一个 FB 实例,以及一个用于读取当前值的变量:
声明
PROGRAM PLC_PRG
VAR
instEvHandler : EventHandler;
udiCurValue : UDINT;
END_VAR
实现
udiCurValue := instEvHandler.udiKeyDownCount;
将事件处理程序分配给可视化效果
版本 < V3.5.SP10
在旧版本中,以下方法是不可能的,因为无法从可视化管理器分配程序: 对于这些版本,必须在程序代码中进行初始化。
- 例如,创建一个类型为“程序”的新 POU,并将其命名为“VisuInit”。
- 编写以下程序代码:
声明
PROGRAM VisuInit
VAR
END_VAR
实现
VisuElems.VisuElemBase.g_VisuEventManager.SetKeyEventHandler(PLC_PRG.instEvHandler);
在“可视化管理器”中分配程序。

下载并启动项目
- 将项目下载到控制器并启动应用程序。
- 可视化将自动启动。 单击可视化窗口以确保它是活动窗口。
- 变量“udiCurValue”在每次按下键盘上的键时递增 1。
