STRUCT数据结构(匿名结构)有关 STRUCT 的基本信息 说明 STRUCT数据类型是指一种元素数量固定但数据类型不同的数据结构。结构也支持嵌套,并 可包含 STRUCT 或 ARRAY数据类型的元素。结构可用于根据过程控制系统分组数据以及作 为一个数据单元来传送参数。变量中直接使用的结构声明称为匿名结构。匿名结构可具有以下形式:结构的嵌套深度和数量 结构 (STRUCT) 的嵌套层级深度为 8 级。S7-1200/S7-1500 系列 CPU 中,一个数据块中Zui多包含 252 个结构 (STRUCT)。如果要使用更多结构,则需要使用 PLC 数据类型 (UDT) 代替“STRUCT”数据类型。 使用 PLC 数据类型 (UDT)(页 244) 传递 STRUCT 数据类型的参数 STRUCT 数据类型可作为参数进行传递。有关将 STRUCT作为参数的更多信息,请参见 “传递 STRUCT 数据类型的变量”匿名结构的缺陷在这种结构化变量中,元素的寻址方式都相同,而不考虑该元素采用 PLC 数据类型声明,还 是采用匿名结构声明。使用匿名结构具有以下缺点: • 维护成本增加:如果对一个匿名结构进行了多次复制,则在更改过程中该匿名结构也必 需进行相应的多次更改。• 匿名结构与 PLC 数据类型 (UDT) 的相同结构不兼容。 • 由于系统会检查所有结构元素的类型是否匹配,会导致性能下降。• 存储空间要求增加:每个匿名结构都是一个单独的对象,其描述信息将加载到 AS 中。 示例 如果在一个 PLC 数据类型 (UDT)中声明数据类型为 STRUCT 的变量,则使用方式将增加(参 见左图)。也可以直接使用数据类型 STRUCT对变量进行声明(参见右图)。 使用或不使用 PLC 数据类型 (UDT) 对结构化变量“Motor”进行声明:复杂结构的处理指令系列(如,“Serialize:序列化”、“Deserialize:取消序列化”、“CMP”(比较器)和“MOVE:移动值”)可处理大量非常复杂的结构化变量。为此,CPU 需要对变量的结构进行分析,并为构中包含的每个子结构或包含的所有基本组件分别执行相应的指令。
如果结构非常复杂,则对结构进行分析可能会导致相应指令的执行时间意外增加。除在运算中指定结构化变量的复杂程度之外,程序中声明的匿名结构总数也会影响指令的运行时间。 大量不同的匿名结构定义也会增加指令的运行时间。解决方法: • 避免使用匿名结构,而使用 PLC 数据类型。 •避免对结构类似的数据结构进行多次声明。建议将这些结构组合到一个结构声明中。 •避免对结构和数据块中相同数据类型的单个变量进行单独声明。此时,如果可能,建议 使用 ARRAY 数据类型。STRUCT 变量的结构简介 STRUCT 变量通常从一个非优化块的一个字限值处开始(即,偶数地址的字节处)。各元素随后按照存储器中声明的顺序进行排列。STRUCT 变量占用的存储空间直至下一个字限值处。 数据类型为 BOOL的元素从Zui低有效位处开始。数据类型为 BYTE 和 CHAR 的元素将从下一个字节处开始。不同数据类型的元素将从一个字限值处开始。在优化块中,结构存储时将根据块的大小进行排序。存储中的顺序与编辑器中的显示顺序不对应。 在嵌套结构中,该结构可作为另一个结构的元素。嵌套深度Zui多可包含 8个结构。可在 “InOut”部分声明Zui大嵌套深度为 9 的结构。计算的嵌套深度包括Zui高结构元素(例如:“Anna.Berta.Carla”对应的嵌套深度为 3)。 所有元素均可单独寻址。各元素的名称之间使用句点进行分隔。寻址STRUCT 元素 寻址结构中的元素 通过以下语法,可访问结构中的单个元素: "