您现在的位置是:首页 > PLC技术 > PLC技术
S7-300/400数组的生成与使用
来源:艾特贸易2017-09-21
简介(1) 生成数组 可以在数据块中定义数组,也可以在逻辑块的变量声明表中定义它。下面介绍在数据块中定义的方法。在 SIMATIC 管理器中用菜单命令“插入”→“ S7 块”→“数据块”生成
(1)生成数组
可以在数据块中定义数组,也可以在逻辑块的变量声明表中定义它。下面介绍在数据块中定义的方法。在SIMATIC管理器中用菜单命令“插入”→“S7块”→“数据块”生成数据块DB4。双击打开它,默认的显示方式为声明视图方式。声明视图用于定义、删除和修改共享数据块中的变量,指定它们的名称、数据类型和初始值。
在新生成的数据块的第一行和最后一行标有STRUCT(结构)和END_STRUCT(结构结束)。在这两行中间有一个自动生成的临时占位符变量。
将该行的名称改为数组的名称“PRESS”(见图4-7),变量的名称只能使用字母、数字和下划线,不能使用中文。用鼠标右键点击该行的“类型”列,执行弹出的快捷菜单中的“复杂类型”→“ARRAY” (数组)命令,在出现的“ARRAY[]”的方括号中输入“1..2,1..3”,即指定二维数组PRESS有2×3个元素。在“注释”列按回车键,在AR-RAY下面一行的“类型”列输入“INT”,定义数组元素为16位整数,INT所在行的“地址”列自动生成的“*2.0”表示一个数组元素占用2B。地址列的“+12.0”表示该数组的6个元素一共占用12B,地址列的内容是自动生成的。可以用中文给每个变量加上注释。
数组的第1个元素为PRESS[1,1](见图4-6和图4-8),第4个元素为PRESS[2,1],第6个元素为PRESS[2,3]。
(2)给数组元素赋予初值
STEP 7根据变量的数据类型给出默认的初始值,用户可以修改初始值。定义数组时可以在ARRAY所在的行的“初始值”列中给数组元素赋初值,各元素的初值之间用英语逗号分隔,例如上例中6个元素的初值可以写成“22,30,-5,0,0,0”,结束时不用标点符号。若相邻元素的初值相同可以简写,上述初值可以简写为“22,30,-5,3(0)”(见图4-7)。
图4-7 定义数组、结构和字符串
执行菜单命令“视图”→“数据视图”,切换到数据视图方式,将显示数组和结构中各元素的初始值和实际值(见图4-8)。
图4-8 数据块的数据视图显示方式
在数据视图方式,显示变量的初始值和实际值,用户只能修改变量的实际值,修改后需要下载数据块。如果用户输入的实际值与变量的数据类型不符,将用红色显示错误的数据。在数据视图方式,用菜单命令“编辑”-÷“初始化数据块”,可以恢复变量的初始值。
(3)访问数组中的数据
本例中的数组是数据块的一部分,访问数组中的数据时,需要指出数据块和数组的名称,以及数组元素的下标,例如”TANK”.PRESS[2,1]。其中的TANK是数据块DB4的符号名,PRESS是数组的名称,它们用英语的句号分开。方括号中是数组元素的下标,该元素是数组中的第4个元素(见图4-8)。
(4)用数组传递参数
如果在块的变量声明表中声明形参的类型为ARRAY,可以将整个数组作为参数来传递。在调用块时也可以将某个数组元素赋值给同一数据类型的参数。
(5)用数组定义数据块的大小
数据块的大小与数据块中定义的变量的个数和数据类型有关。如果需要一个容量很大的数据块,可以用数组来定义数据块的大小。如果在数据块中只定义一个数组ARRAY[1..500],数组元素的数据类型为字,则该数据块的大小为1000B。可以用绝对地址和任意的简单数据类型来访问该数据块中的存储单元。如果访问数据块中未定义的地址,将会出现错误信息“读取时发生区域长度错误”。
(6)设置数据块的参数
用鼠标右键点击某个数据块,执行出现的快捷菜单中的“对象属性”命令,在出现的属性对话框的“常规一第2部分”选项卡中,可以用复选框设置数据块的属性。各参数具体的意义见在线帮助。
(7)使用程序状态功能监视数据块
点击数据块工具栏上的按钮,自动切换到“数据视图”显示方式,数据块内的存储单元在线的数值在“实际值”列中显示。程序状态被激活后,不能切换为“声明视图”方式。
程序状态结束后,“实际值”列将显示程序状态之前的有效内容,在线数值不能传送到离线的数据块。
2.结构的生成与使用
(1)结构的生成
可以在数据块中或逻辑块的变量声明表中定义结构,下面介绍在数据块中定义的方法。在图4-7的数据块DB4中,同时定义了一个数组和一个结构。名为STACK的结构由3个不同数据类型的变量组成。
选中图4-7“ARRAY”下面的“INT”,按回车键,在该单元的下面生成一个空白行。在“名称”列输入结构的名称“STACK”,用鼠标右键点击空白行的“类型”列单元,执行弹出的快捷菜单中的“复杂类型”→“STRUCT”(也可以直接输入STRUCT),连续按回车键后,在该行的下面出现新的行,新的行下面一行增加的“END_STRUCT”(结束结构)是自动生成的,表示该结构的结束。在新的行输入结构的第一个元素“AMOUNT”和它的数据类型。如果没有输入该元素的初值,将会自动生成默认的初值0。用同样的方法生成结构的其他元素。选中结构的“END_STRUCT”单元后按回车键,在下面出现的新的行中定义一个名为Fault、长度为20个字符的字符串。
图4-7的STACK所在行的地址列中的+12.0表示结构在数据块中的起始地址为DBB12。结构各元素的地址列中的“+2.0”等表示结构元素在结构中的相对起始地址,“=8.0”表示该结构一共占用8B。最后一行地址列中的“=42.0”表示DB4中的数组、结构和字符串一共占用42B。可以为结构中各个元素设置初始值和加上注释。在图4-7中输入实数的初始值102.4后,被自动转换为1.024000e+002(1.024×102)。
用鼠标点击结构的第一行或最后一行(即有关键字STRUCT或END_STRUCT的行)的地址列中的单元,将选中整个结构,结构各行的背景变为黑色,字变为白色(称为反色)。若要选中结构中的某一参数,用鼠标点击该行的地址单元,仅该行反色。
(2)访问结构中的元素
可以用结构中的元素的绝对地址或符号地址来访问结构中的元素。访问结构中的数据时,需要指出结构所在的数据块的名称、结构的名称,以及结构元素的名称,数据块TANK内结构STACK的元素AMOUNT应表示为”TANK”.STACK. AMOUNT。因为AMOUNT从数据块TANK (DB4)的第12号字节开始存放,它的绝对地址为DB4. DBW12。
(3)用结构传递参数
如果在块的变量声明表中,声明形参的类型为数组或结构,可以将整个数组或结构而不是它们的某个元素作为参数来传递。调用块时也可以将某个数组或结构的元素赋值给同一类型的参数。
将复杂数据类型的变量作为参数传递时,作为形参和实参的两个变量必须具有相同的数据结构,例如两个结构应具有相同数据类型的结构元素和相同的排列顺序。
点击排行
