包含接口(示例“IKeyEventHandler”)


要求

  • 创建一个标准项目并选择 CODESYS ControlWin V3 作为设备。
  • 向应用程序添加“可视化”。
  • 可视化管理器会自动添加到项目中。
  • 在库管理器中将库 VisuElemBase 添加为顶级库。

图1

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

图2

创建事件处理程序

  • 创建一个名为 EventHandler 的新 FB 并实现接口 IKeyEventHandler 。

图3

使用 FB 自动创建方法“HandleKeyEvent”:

图4

  • 将 UDINT 类型的输出变量添加到 EventHandler:

声明

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;

将 EventHandler 分配给可视化

版本 < V3.5.SP10

在旧版本中,以下方法是不可能的,因为无法从可视化管理器分配程序: 对于这些版本,必须在程序代码中进行初始化。

  • 创建一个类型为 Program 的新 POU,并将其命名为 VisuInit。
  • 编写如下程序代码:

声明

PROGRAM VisuInit
VAR
END_VAR

实现

VisuElems.VisuElemBase.g_VisuEventManager.SetKeyEventHandler(PLC_PRG.instEvHandler);

  • 在可视化管理器中分配程序。

图5

下载并启动项目

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

图6