跳到主要内容

5.2 自定义数据类型

5.2.1 数组

  1. 数组最大维数,三维
  • 一维数组示例如下图所示: alt text

  • 二维数组示例如下图所示: alt text

  • 三维数组示例如下图所示: alt text

  1. 不支持数组的数组(数组嵌套)

  2. 当访问数组成员变量时,数组下标可以是整型数组的成员变量,但数组下标嵌套允许深度最大为9层

    • 即最深允许:A[X1[X2[X3[X4[X5[X6[X7[X8[n]]]]]]]]],这里n, 是整型,X1 ~ X8 是整型数组变量。 超出编译报错
  3. 定义数组变量时,ARRAY OF 类型,天行IDE类型只能是支持的基本数据类型、结构体类型和不含RETAIN成员的FB类型

  4. 数组变量只能整体设置为RETAIN或NON RETAIN

  5. 因为数组不支持嵌套,因此变量是STRING数组类型时,变量成员是STRING类型,不能直接访问到char

提示

定义S1: ARRAY[0..10] of STRING; S1[n] 是STRING类型。 但是,如果定义S1:STRING;S1[n]访问的才是char

  • 目前,用户要访问string数组中的string的成员,只能通过拆分变量过渡去访问成员char。
提示
  • StringArr :ARRAY[0..10] of STRING; Str1:STRING; C1: CHAR; m, n: INT;
  • 支持以下运算 Str1 := StringArr[n]; C1 := Str1[m];

5.2.2 结构体

注意
  • UDT是4字节对齐,您与第三方通信时,望您关注数据大小问题,避免数据错乱
  • 例如,当UDT中,有3个成员变量,分别是,DINT、DINT、CHAR时,此时UDT所占字节为12Byte,而不是9Byte,如下图所示

alt text

  1. 结构体,T3最多嵌套深度6层。 T4最多嵌套深度8层。(ARRAY 算一层)

  2. IEC 标准结构体类型,定义时不支持对结构体的具体元素设置RETAIN。结构体变量可以整体设置为RETAIN

  3. UDT结构体类型创建不能为空,否则编译报错

5.2.3 结构体数组

  数组的元素也可以是结构类型的。因此可以构成结构型数组。结构数组的每一个元素都是具有相同结构类型的下标结构变量。在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体。如一个班的学生档案,一个车间职工的工资表等

5.2.4 功能块类型

  • 一个功能块FB完成编程后,其功能块名称就是一个具体的功能块类型。

  • 功能块类型其语言元素包括了为输入、输出和内部变量的数据结构的定义,功能块类型从纯数据表象类似一个特殊的结构体类型

  • FB类型和STRUCT类型的差异:

    • STRUCT类型是纯粹的数据类型,而功能块类型不是纯粹的数据类型;FB类型和STRUCT类型具体区别在,功能块类型的FB实例可以被调用时,FB实例被调用时,作用在该FB实例的FB程序将被执行

    • STRUCT类型中的成员不可以单独设置为RETAIN存储变量,而FB类型中的成员可以单独设置为RETAIN