首页 理论教育 生成与应用复杂数据类型的优化方法

生成与应用复杂数据类型的优化方法

时间:2023-06-27 理论教育 版权反馈
【摘要】:地址列的“+12.0”表示该行上面的数组的6个元素一共占用12B,地址列的内容是自动生成的。如果用户输入的实际值与变量的数据类型不符,将用红色显示错误的数据。其中的TANK是数据块DB4的符号名,PRESS是数组的名称,它们用小数点分开。如果在数据块中只定义了数组ARRAY[1..500],数组元素的数据类型为字,则该数据块的大小为1000B。图4-4的STACK所在行的地址列中的+12.0表示结构在数据块中的起始地址为DBB12。

生成与应用复杂数据类型的优化方法

1.数组的生成与使用

(1)生成数组

可以在数据块中定义数组,也可以在逻辑块的变量声明表中定义它。下面介绍在数据块中定义的方法。在SIMATIC管理器中执行菜单命令“插入”→“S7块”→“数据块”,生成共享数据块DB 4。双击打开它,默认的显示方式为声明视图方式。声明视图用于定义、删除和修改共享数据块中的变量,指定它们的名称、数据类型和初始值。

在新生成的数据块中自动生成的第一行是STRUCT(结构),最后一行是END_STRUCT(结构结束)。在这两行中间有一个自动生成的临时占位符变量。

将占位符变量的名称改为数组的名称“PRESS”(见图4-4),变量的名称只能使用字母、数字和下划线,不能使用中文。用右键单击该行的“类型”列,执行弹出的快捷菜单中的“复杂类型”→“ARRAY”(数组)命令,在出现的“ARRAY[]”的方括号中输入“1..2,1..3”,即指定二维数组PRESS有2×3个元素。选中“注释”列的单元后按回车键,在ARRAY下面出现空白单元,在其中输入“INT”,定义数组元素为16位整数,INT所在行的“地址”列自动生成的“*2.0”表示一个数组元素占用2B。地址列的“+12.0”表示该行上面的数组的6个元素一共占用12B,地址列的内容是自动生成的。可以用中文给每个变量添加注释。

978-7-111-54209-4-Chapter04-5.jpg

图4-4 在数据块中定义数组、结构和字符

(2)给数组元素赋初始值

定义数组时可以在ARRAY所在的行的“初始值”列中给数组元素赋初始值,各元素的初始值之间用英语逗号分隔,例如上例中6个元素的初始值可以写成“22,30,-5,0,0,0”,结束时不用标点符号。若相邻元素的初始值相同可以简写,上述初始值可以简写为“22,30,-5,3(0)”(见图4-4)。未定义初始值的数组所有元素的初始值均为0。

执行菜单命令“视图”→“数据视图”,切换到数据视图方式,将显示数组和结构中各元素的初始值和实际值(见图4-5)。

978-7-111-54209-4-Chapter04-6.jpg

图4-5 数据块的数据视图显示方式

在数据视图方式,显示变量的初始值和实际值,用户只能修改变量的实际值,修改后需要下载数据块。如果用户输入的实际值与变量的数据类型不符,将用红色显示错误的数据。在数据视图方式执行菜单命令“编辑”→“初始化数据块”,可以恢复变量的初始值。

(3)访问数组中的数据

本例中的数组是数据块的一部分,访问数组中的数据时,需要指出数据块和数组的名称,以及数组元素的下标,例如“TANK”.PRESS[2,1]。其中的TANK是数据块DB4的符号名,PRESS是数组的名称,它们用小数点分开。方括号中的数字是数组元素的下标,该元素是数组中的第4个元素(见图4-5)。

(4)用数组定义数据块的大小

数据块的大小与数据块中定义的变量的个数和数据类型有关。如果需要一个容量很大的数据块,可以用数组来定义数据块的大小。如果在数据块中只定义了数组ARRAY[1..500],数组元素的数据类型为字,则该数据块的大小为1000B。可以用绝对地址和任意的简单数据类型来访问该数据块中的存储单元。如果访问数据块中的地址超出了数据块定义的范围,将会产生“读取时发生区域长度错误”。(www.xing528.com)

2.结构的生成与使用

(1)结构的生成

可以在数据块中或逻辑块的变量声明表中定义结构,下面介绍在数据块中定义的方法。

选中图4-4“ARRAY”下面的“INT”后按回车键,在该单元的下面生成一个空白行。在“名称”列输入结构的名称“STACK”,用右键单击空白行的“类型”列单元,执行弹出的快捷菜单中的“复杂类型”→“STRUCT”(也可以直接输入STRUCT),连续按回车键后,在该行的下面出现新的空白行,空白行下面一行增加的“END_STRUCT”(结束结构)是自动生成的,表示该结构的结束。在新的空白行输入结构的第一个元素“AMOUNT”和它的数据类型。如果没有输入该元素的初始值,将会自动生成默认的初始值0。用同样的方法生成结构的其他元素。

图4-4的STACK所在行的地址列中的+12.0表示结构在数据块中的起始地址为DBB12。结构各元素的地址列中的“+2.0”等表示结构元素在结构中的相对起始地址,“=8.0”表示该结构一共占用8B。最后一行地址列中的“=42.0”表示DB4中的数组、结构和字符串一共占用42B。可以为结构中各个元素设置初始值和加上注释。在图4-4中输入实数的初始值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)用数组和结构传递参数

如果在块的变量声明表中声明形参的类型为数组或结构,可以将整个数组或结构作为参数来传递(见图4-14)。调用块时也可以将数组或结构的元素传递给同一数据类型的参数。

将复杂数据类型的变量作为块的输入、输出参数来传递时,作为形式参数(形参)和实际参数(实参)的两个变量必须具有相同的数据结构,例如两个结构应具有相同数据类型的结构元素和相同的排列顺序。

3.字符串的生成与使用

选中结构的“END_STRUCT”所在的单元后按回车键,在下面出现的新的空白行中定义一个名为Fault、长度为20个字符的字符串(见图4-4),其数据类型为STRING[20]。它占用从DB4.DBB20开始的22B,其初始值只有4个字符‘Over’。字符串变量中未使用的字节地址被初始化为B#16#00。

如果在生成字符串时没有定义它的长度,将会采用默认的长度(254个字符),在STRING的后面自动添加“[254]”。

将DB4下载到仿真PLC,用变量表监控字符串Fault的前两个字节DB4.DBB20和DB4.DBB21,它们的值分别为20(字符串Fault的长度为20)和4(当前有4个字符)。还可以看到从DB4.DBB22开始的4个字节中的ASCII码字符‘Over’。可以用指令访问字符串中的字符,例如用指令“L DB4.Fault[3]”来访问字符串Fault的第3个字符“e”。在字符串的当前有效字符改变时,字符串的第2个字节不会自动变化,需要用户程序来管理它。

可以用标准库的IEC库中的功能(FC)来处理字符串变量,包括字符串与其他数据类型的转换、字符串的比较和字符串的编辑,具体的使用方法见有关FC的在线帮助。

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

我要反馈