包含一个接口(例如:“IKeyEventHandler”)

要求

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

图1

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

图2

创建事件处理程序

  • 创建一个名为“EventHandler”的新 FB,并实现接口“IKeyEventHandler”。 “HandleKeyEvent”方法是使用FB自动创建的:

图3

图4

  • 将类型为“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);

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

图5

下载并启动项目

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

图6