阅读PLC数据说明时,可能先看到“数组中的元素类型相同”,随后又看到同一组记录里有整数和其他类型。两句话并不冲突。关键在于这里谈的是数组最外层的元素,还是一个元素内部的结构成员。CODESYS的ARRAY与STRUCT文档把这两个层次分别作了定义。

ARRAY页面将数组定义为同一数据类型元素的集合,并明确元素类型可以是用户定义的数据类型。也就是说,“同一种类型”不等于“只能是一个简单数值”。只要每个元素都采用同一个结构类型,数组仍符合这个定义,结构内部的组成则由该类型说明。

STRUCT页面将结构描述为把多个变量组合成一个逻辑单元的用户定义类型,这些变量称为成员,可以采用不同数据类型。因此,结构首先定义的是一组成员如何被组织到一起。当这种结构用于数组时,数组重复的是这组组织方式,而不是要求组内每个成员都变成同一类型。

原厂ARRAY页的DATA_A例子尤其直观:这个结构中有两个INT成员和一个DWORD成员,数组的元素类型则统一写为DATA_A。文档用三个维度的数量相乘,得到90个这样的元素。90说的是结构记录的个数,不是说整个数组只有90个简单整数,也不是把结构内的三种位置混成一个字段。

由此阅读一张类型表,可以先问“每项记录是什么类型”,再问“这项记录由哪些成员组成”。前一个问题由数组元素类型回答,后一个问题由结构定义回答。成员的类型不同,不会自动使整个数组变成混合元素类型的集合;反过来,记录外形相似,也不等于资料已证明它们采用同一个结构定义。

本文只解释原厂文档中的类型关系,没有将示例改成可下发的控制程序,也不讨论地址布置、驱动控制或生产调试。对可编程控制系统资料而言,先分清元素与成员,能够避免在变量表交流中把不同层次的“同一类型”误读成互相矛盾的要求。

信息来源

本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。