您现在的位置是:首页 > PLC技术 > PLC技术

STEP 7数据块中的数据类型

来源:艾特贸易2017-06-04

简介数据块中的数据类型包括基本数据类型和复合数据类型。 有关基本数据类型 BOOL 、 BYTE 、 WORD 、 DWORD 、 CHAR 、 INT 、 DINT 、 REAL 、 TIME 、 DATE 、 TIME_OF_DAY 等的知识我们在第 3.2.2 节中已

    数据块中的数据类型包括基本数据类型和复合数据类型。    有关基本数据类型BOOLBYTEWORDDWORDCHARINTDINTREALTIMEDATETIME_OF_DAY等的知识我们在第3.2.2节中已经详细介绍过,下面我们学习复合数据类型。    所谓复合数据类型,就是基本数据类型的组合。数据长度超过32bit。因为数据长度超过累加器的长度,所以不可以一次把整个数据装入累加器,往往需要利用一些特殊的方法(如库中的标准块)来处理这些数据。复合数据类型如表6-3所示。    6-3    复合数据类型
复合数据类型
    从表6-3中可以看出,DAT_AND_TIMESTRING明显地就是前面基本数据类型的组合。而ARRAYSTRUCTUDT的组成,是由用户定义的,可以包含基本数据类型和复合数据类型。这些数据类型,为结构化带来很大的方便。    (1) DATE_AND_YIME    当使用DATE_ANDTIME数据类型(DT)输入日期和时间时,输入条目以8个字节的二进制编码的十进制格式存储。DA YE_ANDTIME数据类型的范围如下:    DT#1990 -1-1-0:0:0.0DT#2089 -12 -31-23: 59: 59.999    下面的实例给出了日期和时间分别是29931225日星期四上午8011.23秒的语法。下列两种格式是可行的:DATE_AND_TIME#1993 - 12 - 25 -801:1.23DT#1993 -12 -25-8011.23    (2)数组(ARRAY)    数组组合一组相同的数据类型(基本或复杂)以构成单元。可以创建包含数组的数组。当定义数组时,必须做如下步骤:    ·给数组指定名称。    ·用关键字ARRAY声明数组。    ·使用下标指定数组的大小。指定数组中各个维(最多为6维)的第一个和最后一个    数字。将下标输入方括号中,每个维数之间用逗号隔开,维数中的第一个数字和最    后一个数字之间用两个点隔开。例如,下列下标定义一个三维数组:[1..5-2..    330..32]    ·指定包含在数组中的数据的类型。    6-6显示具有三个整数的一维数组。使用下标访问数组中存储的数据。下标是在方括号中的数字。例如,第二个整数的下标是Op_temp[2]。下标可以是任何整数(- 32768 -32767),包括负的值。下图中的数组也可以被定义为ARRAY [-1..1]。然后,第一个整数的下标可以是Op_temp[-1],第二个可以是Op_temp[0],而第三个整数可以是Op_temp[1]
创建数组示例图
    6-6    创建数组示例图    可以在数据块中创建多维数组。图6-7所示为创建的二维整数数组及可使用的元素。使用下标访问多维数组中的数据。在此例中,第一个整数是Op_temp[11],第三个是Op_temp[13],第四个是Op_temp[21],第六个是Op_temp[23]。还可以定义变量Op_temp如下作为六维数组:    ARRAY[1..3,1..2,1..3,1..4,1..3,1..4]    在此数组中的第一个元素的下标是Op_terrip[111111],最后元素的下标是Op_temp[3,2,3,4,3,4].
二维整数数组示例图    6-7    二维整数数组示例图    1)创建数组。当在DB中或在变量声明中声明数据时,可以定义数组。当声明数组时,在方括号中数组大小后跟指定的关键字( ARRAY)[下限值..上限值]。在多维数组中,也可以指定另外的上限和下限值,并用逗号分开各个维数。如图6-8所示格式为2×3的数组创建的声明。
数组声明示例图
    6-8    数组声明示例图    2)给数组赋初值。当创建数组时,可以将初始值赋给每个数组元素。STEP 7提供两种方式输入初始值:    ·输入单个值:对于数组的每个元素,指定有效的数组数据类型值。按元素顺序指定    值:[11]。记住各个元素必须用逗号互相隔开。    ·指定重复因子:对于具有相同初始值的有序元素,可以指定元素的数目(重复因    子),以及这些元素的初始值。输入重复因子的格式是x(y),此处x是重复因子,    y是重复的值。    如果使用图6-8中声明的数组,可以如下为全部六个元素指定初始值:1723- 4555633420。也可以通过指定6 (10)设置所有六个元素的初始值为10。可以指定前两个元素的特定值,然后设置余下的四个元素为0,如下指定:17234(0)    3)访问数组中的数据。通过数组中特定元素的下标访问数组中的数据,下标使用符号名。例如,如果在图6-8中声明的数组以DB20 (Motor)的第一个字节开始,用下列地址访问数组的第二个元素:MotorHeat_2×3[12]    4)将数组作为参数。可以将数组作为参数传送。如果在变量声明中参数被声明为AR-RAY,必须传送整个数组(而不是单个元素)。然而,当调用块时,倘若数组的元素符合参数的数据类型,数组的元素就可以分配给一个参数。    如果使用数组作为参数,数组不需要具有相同的名称(它门甚至不需要名称)。然而,两个数组(形式参数和实际参数)必须具有相同的结构。例如,只有当块的形参定义为格式2×3的整数数组,并且调用操作提供的实际参数为2×3的整数数组时,格式2×3的整数数组才能作为参数传送。    (3)结构(STRUCT)    结构组合了各种数据类型(基本和复杂数据类型,包括数组和结构),形成一个单元。可以归类数据以适合过程控制。因此,也可以将参数作为数据单元传送,而不是作为单个元素传送。图6-9说明包含整数、字节、字符、浮点数和布尔值的结构。结构最多可以嵌套8层(例如,结构由包含数组的结构组成)。
结构(STRUCT)示例图
    6-9    结构(STRUCT)示例图    1)创建结构。当在DB中或在逻辑块的变量声明中声明数据时,就定义了结构。图6-10说明了结构的声明(Stack_l)包含下列元素:整数(用作保存总数)、字节(用于保存原始数据)、字符(用于保存控制代码)、浮点数(用于保存温度)和布尔型存储位(用于终止信号)。
创建结构(Stack_1)示例图
    6-10    创建结构(Stack_1)示例图    2)为结构赋初始值。如果想要将初始值赋给结构的每个元素,则要指定有效数据类型的值和元素名称。例如可以赋值下列初始值给图6-10中声明的结构Stack_1
    3)在结构中保存和访问数据。用户能够访问结构的各个元素。可以使用符号地址(例如,Stack_1Temperature]。然而,也可以指定元素所位于的绝对地址(如果Stack_1位于DB20,以字节0开始,amount的绝对地址是DB20. DBW0,而temperature的地址是DB20. DBD6)   4)使用结构作为参数。可以将结构作为参数传送。如果参数在变量声明中被声明为STRUCT,则必须传送具有相同组件的结构。然而,当调用块时,倘若结构的元素符合参数的数据类型,结构的元素就可以分配给一个参数。如果使用结构作为参数,两个结构(对于形式参数和实际参数的)必须具有相同的组件。换句话说,相同的数据类型必须以相同的顺序排列。    (4)用户自定义类型(UDT)    用户自定义数据类型( UDT)可以组合基本和复杂数据类型。可以指定名称给UDT,并多次使用它们。图6-11说明包含整数、字节、字符、浮点数和布尔值的用户自定义数据类型的结构。
用户自定义数据类型(UDT)示例图
    6-11    用户自定义数据类型(UDT)示例图    代替逐一地输入所有数据类型或作为结构,只需要指定“UDT20”作为数据类型,STEP 7自动地分配相应的内存空间。    1)创建用户自定义数据类型。使用STEP 7定义UDT。图6-12中给出的UDT包括如下的元素:整数(用作保存总数)、字节(用于保存原始数据)、字符(用于保存控制代码)、浮点数(用于保存温度)和布尔型存储位(用于终止信号)。可以在符号表中指定一个符号名称给UDT(例如process data)。
创建用户自定义类型( UDT)示例图
    6-12    创建用户自定义类型( UDT)示例图    一旦已创建UDT,可以像数据类型那样使用UDT。例如在DB中(或在FB的变量说明中)为变量声明了数据类型UDT200    6-13给出了具有变量process_data_1以及数据类型UDT200DB。只指定UDT200process_data_1。当编译DB时,以斜体字显示被创建的数组。
使用用户自定义类型(UDT)示例图
    6-13    使用用户自定义类型(UDT)示例图    2)为用户自定义数据类型分配初始值。如果希望将初始值赋给用户自定义数据类型的每个元素,要指定有效数据类型的值和元素的名称。例如可以赋值下列初始值(给上图中声明的用户自定义数据类型):
    如果声明变量为UDT,变量的初始值是当创建UDT时指定的值。    3)在用户自定义数据类型中保存和访问数据。用户访问UDT的各个元素。可以使用符号地址(例如,Stack1. Temperature)。然而,也可以指定元素位于的绝对地址(例如,如果Stackj位于DB20,以字节0开始,anount的绝对地址是DB20DBW0,而temperature的地址是DB20.DBD6)。    4)使用用户自定义数据类型作为参数。可以将数据类型UDT的变量作为参数传送。如果参数在变量说明中被声明为UDT,必须传送具有相同结构的UDT。然而,当调用块时,倘若UDT的元素符合该参数的数据类型,UDT的元素可以分配给一个参数。