首页 理论教育 复合数据类型介绍

复合数据类型介绍

时间:2023-06-17 理论教育 版权反馈
【摘要】:复合数据类型中的数据是由基本数据类型的数据组合而成或者长度超过32位的数据类型。STEP7中可以有DATE_AND_TIME、STRING、ARRAY、STRUCT、UDT、FB和SFB等复合数据类型。图5-7 STRING字符串数据类型数据排列ARRAY(数组)由相同数据类型的数据组成数组。

复合数据类型介绍

复合数据类型中的数据是由基本数据类型的数据组合而成或者长度超过32位的数据类型。STEP7中可以有DATE_AND_TIME、STRING、ARRAY、STRUCT、UDT(User-Defined dataTypes)、FB和SFB等复合数据类型。

(1)DATE_AND_TIME(时钟)

DATE_AND_TIME数据类型表示时钟信号,数据长度为8个字节(64位),分别以BCD码的格式表示相应的时间值,如时钟信号为1993年12月25日8点12分34秒567毫秒存储于8个字节中,每个字节代表的含义见表5-4。

5-4 DATE_AND_TIME数据类型中每个字节的含义

978-7-111-28718-6-Chapter05-11.jpg

通过调用IEC标准函数块,可以将DATE_AND_TIME时间类型的数据与基本数据类型的数据相转换,如:

1)转换DATE和TIME OF DAY值到DATE_AND_TIME值需要调用FC3:D_TOD_DT;

2)从DATE_AND_TIME数据中选取DATE值需要调用FC6:DT_DATE;

3)从DATE_AND_TIME数据中选取TIME OF DAY值需要调用FC8:DT_TOD。

(2)STRING(字符串)

STRING字符串最大长度为256个字节,前两个字节存储字符串长度信息,所以最多包含254个字符,其常数表达形式为由两个单引号包括的字符串,例如‘SIAMTIC S7’。STRING字符串第一个字节表示字符串中定义的最大字符长度,第二个字节表示当前字符串中有效字符的个数,从第三个字节开始为字符串中第一个有效字符(数据类型为“CHAR”),例如定义为最大4个字符的字符串STRING[4]中只包含两个字符‘AB’,实际占用6个字节,字节排列如图5-7所示。

978-7-111-28718-6-Chapter05-12.jpg

图5-7 STRING字符串数据类型数据排列

(3)ARRAY(数组

由相同数据类型的数据组成数组。数组的维数最大可以到6维;数组中的元素可以是基本数据类型或者复合数据类型中任意数据类型(Array类型除外,即数组类型不可以嵌套);例如:Array[1..3,1..5,1..6]INT,定义了一个元素为整数,大小为3×5×6的三维数组,可以使用索引([2,2])访问数组中的数据,数组中每一维的索引取值范围是-32768~32767,但是索引的下限必须小于上限,例如1..2、-5..-1都是合法的定义,索引值按偶数占用CPU存储区空间,例如一个单元为字节的数组ARRAY[1..21],数组中只有21个字节,实际占用CPU22个字节。定义一个数组时,需要指明数组的元素类型、维数和每一维的索引范围,可以用符号名加上索引来引用数组中的某一个元素,例如a[1,2,3],也可以通过地址直接访问。

与其他高级语言相比,索引必须为常数,不能作为变量间接寻址,只能通过使用指针间接寻址,这样必须清楚数组元素的排列顺序及绝对地址,例如一个元素为字节的两维数组ARRAY[1..2,1..3]在数据块中的排列顺序及绝对地址如图5-8所示。(www.xing528.com)

978-7-111-28718-6-Chapter05-13.jpg

图5-8 数组单元的排列顺序和绝对地址

(4)STRUCT(结构体)

结构体是由不同数据类型组成的复合型数据,通常用来定义一组相关的数据,例如在数据块DB1中定义电动机的一组数据,如图5-9所示(框中为结构体中的元素及绝对地址)。

978-7-111-28718-6-Chapter05-14.jpg

图5-9 结构体变量的定义和绝对地址

如果引用整个结构体变量,可以直接填写符号地址,例如“DB1.motor”,如果引用结构体变量中的一个单元例如“command_setpoint”,可以直接访问绝对地址如:DB1.DBW0,也可以使用符号名访问如:“DB1.motor.command_setpoint”。

(5)UDT(用户自定义数据类型)

UDT与STRUCT数据类型的定义相同,可以由不同的数据类型组成,如基本数据类型和复合数据类型,与STRUCT不同的是,UDT是一个用户自定义数据类型模板,作为一个整体的变量可以多次调用。例如,在S7程序的Blocks目录下点击右键,在弹出的菜单中,选择“Insert New Object”➝“Data Type”新建一个UDT块,在UDT中定义图5-9中的motor数据结构作为一个模板,然后在数据块或程序块的形参中插入多个已经定义的UDT,可以定义不同电动机的变量,如图5-10所示。

978-7-111-28718-6-Chapter05-15.jpg

图5-10 UDT的使用

注意:

上述复合数据类型只能在数据块(DB)和本地数据区(L)中建立,对于超出4个字节的数据,必须以符号名的方式引用,例如一个数组类型数据包含10个元素,每个元素为字节,首先在DB1中按要求建立一个数组类型数据,10个元素,每个元素为字节,符号名称为“ARR”,赋值时必须填写DB1.ARR,数组中的数据可以按单字节变量处理。DATE_AND_TIME、STRING、STRUCT数据类型变量与数组类型变量处理方式相同(通过指令只能对基本数据类型的数据进行操作)。

(6)FB和SFB(函数块和系统函数块)

这种数据类型仅可以在FB的静态变量区作定义,可以将多次调用FB而生成的多个背景数据传送到一个背景数据块中(多背景DB)。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈