以下内容节选自机械工业出版社出版的西门子自动化技术丛书----《SIMATIC S7- 1500 与 TIA博途软件使用指南》, 作者崔坚。更多更详细的内容请您参考《SIMATIC S7- 1500 与 TIA博途软件使用指南》一书。
复合数据类型
5.1.2复合数据类型
复合数据类型中的数据由基本数据类型的数据组合而成,其长度可能超过64 位。S7-1500中可以有DATE_AND_TIME、STRING、ARRAY、STRUCT等复合数据类型。
DATE_AND_TIME数据类型用于表示时钟信号,数据长度为8个字节(64位),分别以BCD码的格式表示相应的时间值。如时钟信号为1993年12月25日8点12分34秒567毫秒存储于8个字节中,每个字节代表的含义参考表5- 4。
通过函数块可以将DATE_AND_TIME时间类型的数据与基本数据类型的数据相转换,如:
DTL 的操作数长度为 12 个字节,以预定义结构存储日期和时间信息,DTL数据类型中每个字节的含义见表5- 5。例如2013年12月16日20点34分20秒250纳秒的表示格式为:DTL#2013-12-16-20:34:20.250。
STRING字符串最大长度为256个字节,前两个字节存储字符串长度信息,所以最多包含254个字符,其常数表达形式为由两个单引号包括的字符串,例如‘SIMATIC S7’。STRING字符串第一个字节表示字符串中定义的最大字符长度,第二个字节表示当前字符串中有效字符的个数,从第三个字节开始为字符串中第一个有效字符(数据类型为“CHAR”)。例如定义为最大4个字符的字符串STRING[4]中只包含两个字符‘AB’,实际占用6个字节,字节排列如图5- 8所示。
WSTRING宽字符串如果不指定长度,在缺省情况下最大长度为256个字,可声明最多 16382 个字符的长度 (WSTRING[16382]),前两个字存储字符串长度信息,其常数表达形式为由两个单引号包括的字符串,例如:WSTRING#'你好,中国'。WSTRING宽字符串第一个字表示字符串中定义的最大字符长度,第二个字表示当前字符串中有效字符的个数,从第三个字开始为宽字符串中第一个有效字符(数据类型为“WCHAR”)。例如定义4个字符的字符串WSTRING[2]中只包含两个字符‘AB’,实际占用4个字,字节排列如图5- 9所示。
Array 数据类型表示一个由固定数目的同一种数据类型的元素组成的数据结构。数组的维数最大可以到6维。数组中的元素可以是基本数据类型或者复合数据类型(Array类型除外,即数组类型不可以嵌套)。例如:Array[1..3,1..5,1..6] of INT, 定义了一个元素为整数,大小为3×5×6的三维数组。可以使用索引访问数组中的数据,数组中每一维的索引取值范围是-32768到32767(16位上下限范围),但是索引的下限必须小于上限。索引值按偶数占用CPU存储区空间,例如一个数据类型为字节的数组ARRAY[1..21],数组中只有21个字节,实际占用CPU 22个字节。定义一个数组时,需要声明数组的元素类型、维数和每一维的索引范围,可以用符号名加上索引来引用数组中的某一个元素,例如a[1,2,3]。
Array数组的索引可以是常数,也可以是变量。在S7-1500中,所有语言均可支持Array数组的间接寻址。在LAD中实现变量索引寻址的示例如图5- 10所示。
结构体是由不同数据类型组成的复合型数据,通常用来定义一组相关的数据。例如在优化的数据块DB1中定义电机的一组数据,如图5- 11所示。
如果引用整个结构体变量,可以直接填写符号地址,例如“Drive.motor”,如果引用结构体变量中的一个单元例如“command_setpoint”,也可以使用符号名访问,如:“Drive.motor. command_setpoint”。