读写用户定义的类型标签

罗克韦尔驱动程序支持在触发器动作中读写整个用户定义类型 (UDT) 标签。之前,必须分别读取或写入 UDT 的每个成员,这需要多个触发器动作来处理整个 UDT 标签。驱动程序现在支持将整个 UDT 标签的数据作为 BINARY 数据类型进行处理。通过下面的示例可以最好地了解其用途。 

阅读 UDT 标签

Rockwell ControlLogix PLC 上定义了一个名为 Audt01 的标签。它是名为 UDT01 的 UDT 的一个实例。UDT01 包含布尔标签、整数标签和字符串标签,如下图所示。 

现在可以使用需求读取触发器动作或设置触发器动作读取 Audt01 变量的全部内容。在本例中,使用了需求读取触发器动作。

数据将从 Audt01 UDT 中读取到一个二进制缓冲区变量中。缓冲区的长度必须大于或等于被读取的 UDT 的大小。在本例中,UDT01 UDT 的大小是 200 字节。UDT 的大小可以通过几种方式来确定,其中第一种是使用 Rockwell RSLogix 5000 软件。使用 Rockwell RSLogix 5000 软件,在控制器组织器上的数据类型菜单的用户定义类别中选择 UDT。UDT 的大下将显示在概览窗口中。无法访问 RSLogix 5000 软件的用户也可以通过在工作台的设备定义面板上为 Rockwell ControlLogix 和 CompactLogix 设备类型启用 Create UDT Binary Description Files(创建 UDT 二进制描述文件)选项来获得此信息。 

UDT 二进制描述文件

在定义 Rockwell ControlLogix 和 CompactLogix 设备时,有一个新字段可用,它将在设备启动时创建 UDT 二进制描述文件。这些 JSON 格式的文件描述了与 UDT 标签相关联的二进制有效负载。UDT 中的每个成员都有一个条目,描述其数据类型、成员在有效负载中的数据偏移量,以及处理成员数据所需的任何特殊处理。这些文件将在启动设备并启用 Create UDT Binary Description Files(创建 UDT 二进制描述文件)设置时创建。这些文件将存储在节点的暂存浏览器区域中,在名为 rockwell/json 的目录下。带有设备名称的子目录将在 rockwell/json 目录下创建,并将保存与 Rockwell PLC 上定义的 UDT 相关联的 UDT 二进制描述文件。 

上图所示的暂存浏览器图像更好地解释了 UDT 二进制描述文件所使用的目录结构和命名约定。显示的是 rockwell/json 目录,每个 Rockwell ControlLogix 和 CompactLogix 设备都有子目录。为每个在 Rockwell PLC 上定义的 UDT 创建单独的 JSON 文件。还有一个为每个设备创建的特殊 JSON 文件,如图中高亮显示的 JSON 文件所示。在该图中,创建了名为 Rockwell_ControlLogix_UDT_Sizes.json 的文件,并针对设备上定义的每个 UDT 都有一个条目。UDT 条目显示了 Rockwell PLC 上定义的每个 UDT 的大小。将此信息提供给那些无法访问 RSLogix 5000 软件以确定此信息的用户。如上一节所述,在读取 UDT 标签时需要 UDT 的大小。

将 UDT 二进制数据转换为可读格式

解码二进制缓冲区(解码二进制缓冲区)可用于将 UDT 数据从二进制格式转换为可读格式。这种转换可以直接转换到另一个供应商(如三菱或西门子)的 PLC 上的设备变量。它也可以被转换到本地触发器变量中,以便在以后的触发器中使用,例如转换到一个本地变量中,这个变量将成为数据库插入的数据源。 

上图显示了如何使用解码二进制缓冲区动作将二进制格式的 UDT 数据转换成可读格式的例子。在本例中,Rockwell ControlLogix 设备启动时创建的 UDT01.json 文件用于定义可在此动作中引用的输出变量。每个输出变量都对应于 UDT 中的一个成员。在本例中,bool1 成员的值将被写入 Mitsubishi Q PLC。sint1 成员的值被写入一个名为 sint1 的触发器本地变量,而其他变量则被写入一个 Modbus 设备、一个全局变量设备和另一个 ControlLogix 设备。UDT 数据从 ControlLogix 设备读入二进制缓冲区之后,解码二进制缓冲区动作在数据的移动位置和使用方式方面提供了很大的灵活性。 

编写 UDT 标签

如上所述,读取整个 UDT 的步骤是首先使用需求读取或设置动作从 PLC 中获取数据到二进制缓冲区。数据进入二进制缓冲区之后,就会使用解码二进制缓冲区动作进行转换。写入整个 UDT 标签的步骤类似,但有所不同。首先,使用 编码二进制缓冲区(编码二进制缓冲区)将可读数据转换到二进制缓冲区。然后使用需求写入或设置动作将二进制缓冲区写入 UDT 标签。 

与解码二进制缓冲区动作一样,编码二进制缓冲区动作利用了 ControlLogix 或 CompactLogix 启动时创建的 UDT 二进制描述文件。UDT 二进制描述文件中的信息用于创建编码二进制缓冲区动作所需的输入变量。输入变量对应于 UDT 中的每个成员。上面的例子显示了如何将数据从 Mitsubishi Q PLC 映射到 UDT 成员在二进制缓冲区中的位置。该动作执行后,二进制缓冲区将被来自 Mitsubishi Q PLC 的值所填充。然后,二进制缓冲区将准备好使用需求写入触发器动作或设置触发器动作写入到 ControlLogix 或 CompactLogix PLC 上定义的 UDT 标签。