从HMI的字幕控制

通过Jeffrey Hadley, NEDDAM软件技术公司 二一年九月一日

H你曾经想在你的HMI包中配置和控制你的字幕吗?不只是从你的HMI发送消息到一个选框,而是有一整个银行的选框显示,能够发送一个完全可配置的,唯一的消息给他们每个人?

我最近遇到了这个挑战。我们的客户有一组他们想要控制的选框。选框制造商提供了一个驱动程序应用程序,可以对选框进行完全控制。这个应用程序在实验室里工作得很好,但是使用他们的驱动程序意味着要安装更多的软件,需要他们的操作员学习另一个界面。客户联系我们寻求帮助。基本需求包括Cimplicity HMI(5.0版本)项目中的配置和控制。我们决定结合使用Cimplicity的DEVCOM工具包和点管理API来编排解决方案。工具箱和API都在C编程环境中使用。

使用我们的解决方案,最终用户配置一个设备(或者更确切地说是一个集线器),从其中连接多个选框。它们还为每个选框配置点。连接到集线器的每个字幕都有一个设备点。集线器用于标识连接到它的特定字幕的地址作为设备点地址输入。其余的点都是虚点。消息配置是通过屏幕上的选择完成的。复选框的文本和消息的属性数据存储在点中,以供将来使用。通过切换连接到特定字幕的触发点(读取设备点),将消息发送到字幕。

因为用户想要控制项目中的任意数量的选框,所以我们使用DEVCOM工具包来处理与各种选框的通信。DEVCOM工具包可以访问点管理API所不具有的设备信息。在设备配置中提供的信息提供了到集线器的IP地址位置,从集线器可以连接多个选框。

由于可以将许多这样的集线器附加到一个项目中,因此了解特定消息数据集打算发送到哪个集线器非常重要。DEVCOM还负责捕获' send '请求,将消息及其配置写入字幕。发送请求不仅仅是更改与特定字幕和集线器相关联的设备点。一旦DEVCOM知道要与哪个集线器和字幕对话,它就可以查询点管理API以获得消息配置数据,然后通过制造商提供的库(.dll)将消息发送到字幕。

通过使用点管理API从点数据库检索消息配置数据。一个经过深思熟虑的点命名约定使得这项工作相当简单。触发点的根名称用于制定消息参数点名称。例如,MARQUEE_1_TRIGGER被截断为MARQUEE_1。然后使用根名称创建配置点名称,如MARQUEE_1_BLINK和marquee_1_align。

为了方便点名称的创建,收集点属性值,并帮助代码维护;我定义了一些与point属性具有相同名称的常量。

#定义_BOLD 0
#定义对齐方式
#定义_BLINK

我使用常量值作为偏移量,从保存点名和点值的两个全局数组中检索数据。点名数组中的点名用于检索点值数组的点数据。除了使用常量值作为数组偏移量外,我还创建了一个宏,该宏将使用常量名并从它们创建点名。

  • 宏定义:
    #定义setupPointNames(x, ptNameArray) strcpy(ptNameArray[x], strinc(#x));

  • 调用宏:
    setupPointNames(_align, ptNames)

  • 基于上面调用的宏的扩展:
    strcpy (ptNameArray [1], strinc(“对齐”));

为了实现这一点,宏使用了' stringizing '操作符(#)。该操作符将传递的常量转换为字符串。转换为字符串后,常量名被复制到点名数组中。在数组中的位置由传递的常量的值决定。这种方法允许我在一个地方定义属性的名称,但在许多地方和许多函数中使用它们。

组装好点名后,将从点数据库检索这些点的值,并用于配置发送到实际字幕的命令。

除了宏之外,我还抽象了点管理API函数,以简化点值的收集。点管理API包含许多函数,这些函数允许对点数据库进行完全控制,但只获取一个值会使它变得乏味。通过组合函数,我可以通过简单地将点名传递给一个函数来检索点的值。这使得开发更加简单,并抽象了点管理API的细节。

如果需要,字幕状态值可以通过DEVCOM中的读请求获得,或者在Point Management API中使用用于将消息发送到字幕的函数的返回代码设置。

最后,解决方案是对现有技术的简单合并。合并是由每个部分可以访问的数据所必需的。合并后,我们的客户可以完全控制他们的军火库。控制。

Jeffrey Hadley是NEDDAM软件技术公司的软件开发人员。欲了解更多信息,请访问NEDDAM网站https://www.neddam.com。

评论?给加里·明切尔发邮件gmintchell@cahners.com