首页 理论教育 生成与调用实训二十四功能块

生成与调用实训二十四功能块

时间:2023-06-26 理论教育 版权反馈
【摘要】:功能块主要用来执行在一个扫描周期不能结束的操作。每次调用功能块时应指定不同的背景数据块,后者随功能块的调用而打开,在调用结束时自动关闭。背景数据块相当于每次调用功能块时指定的某个被控对象专用的私人数据仓库。打开OB1,单击工具栏上的 按钮,启动程序状态监控功能。

生成与调用实训二十四功能块

1.生成功能块

功能块是用户编写的有自己的存储区(背景数据块)的逻辑块。功能块主要用来执行在一个扫描周期不能结束的操作。用新建项目向导生成一个名为“FB例程”的项目(见随书光盘中的同名例程),CPU为CPU 315-2DP。执行SIMATIC管理器的菜单命令“插入”→“S7块”→“功能块”,在出现的“属性–功能块”对话框中(见图4-4),采用默认的名称FB1,设置创建语言为LAD(梯形图)。采用默认的设置,FB1有多重背景功能。

978-7-111-53804-2-Chapter04-8.jpg

图4-4 FB1的属性对话框

2.生成局部变量

控制要求如下:用Bool输入参数“Start”(启动按钮)和“Stop”(停止按钮)控制输出参数“Motor”(电动机)。按下停止按钮,输入参数TOF指定的断电延时定时器开始定时,输出参数“Brake”(制动器)为1状态,开始制动。经过设置的时间预设值后,停止制动。图4-5的上面是FB1的变量声明表,下面是程序。

978-7-111-53804-2-Chapter04-9.jpg

图4-5 FB1的变量声明表与程序

整数输入参数Speed(实际转速)与初始值为1500的静态变量PreSpeed(预置转速)比较,在Q0.0为1状态时,如果实际转速大于等于预置转速,Bool输出参数OverSpeed转速过高)为1状态。从功能块执行完,到下一次重新调用它,其静态变量(STAT)的值保持不变。

本例程的输入参数TOF的数据类型为Timer(定时器),TOF的实参应为定时器的编号例如T1)。

3.背景数据块

背景数据块是调用功能块时指定给被控对象的专用的数据块。背景数据块用来保存FB和SFB的输入参数IN、输出参数OUT、输入_输出参数IN_OUT和静态数据STAT,背景数据块中的变量是自动生成的。它们是功能块的变量声明表中的变量(不包括临时变量,见图4-5和图4-6),临时变量(TEMP)存储在局部数据堆栈中。每次调用功能块时应指定不同的背景数据块,后者随功能块的调用而打开,在调用结束时自动关闭。背景数据块相当于每次调用功能块时指定的某个被控对象专用的私人数据仓库

978-7-111-53804-2-Chapter04-10.jpg

图4-6 FB1的背景数据块DB1

功能块执行完以后,背景数据块中的数据不会丢失,以供下一次执行功能块时使用。其他逻辑块可以访问背景数据块中的变量。

4.在OB1中调用FB1

双击打开OB1,执行菜单命令“视图”→“总览”,显示出左边的指令列表。打开“FB块”文件夹,将其中的FB1拖放到程序区的水平“导线”上(见图4-7)。

978-7-111-53804-2-Chapter04-11.jpg

图4-7 OB1调用FB1的程序状态

双击方框上面的红色“”,输入背景数据块的名称DB1,按回车键后出现的对话框询问“背景数据块DB1不存在,是否要生成它?”,单击“是”按钮确认。打开SIMATIC管理器,可以看到自动生成的DB1。

也可以首先生成FB1的背景数据块(见图4-8),然后在调用FB1时使用它。应设置生成的数据块为背景数据块,如果项目中有多个FB,还应设置是哪一个FB的背景数据块。

978-7-111-53804-2-Chapter04-12.jpg

图4-8 背景数据块的属性对话框

背景数据块中的变量是自动生成的,不能在背景数据块中直接删除和修改它们,只能在它对应的功能块的变量申明表中删除和修改这些变量。

生成功能块的输入、输出参数和静态变量时,它们被自动指定一个初始值,用户可以修改这些初始值。它们被传送给FB的背景数据块,作为同一个变量的初始值。

如果调用时没有给形参指定实参,功能块使用背景数据块中形参的数值。该数值可能是在功能块的变量声明表中设置的形参(例如静态变量PreSpeed)的初始值,也可能是开机后调用FB时储存在背景数据块中的数值。

5.仿真实验(www.xing528.com)

打开PLCSIM,将所有的块下载到仿真PLC,将仿真PLC切换到RUN-P模式。打开OB1,单击工具栏上的 978-7-111-53804-2-Chapter04-13.jpg 按钮,启动程序状态监控功能(见图4-7)。

单击两次PLCSIM中I0.0对应的小方框,模拟按下和放开启动按钮。可以看到OB1中I0.0的值的变化。由于内部程序的作用,输出参数Motor的实参Q4.0变为1状态。

用PLCSIM修改实际转速MW2的值,它大于等于转速预置值PreSpeed的初始值1500时,输出参数OverSpeed和它的实参Q4.2为1状态,反之为0状态。

单击两次I0.1对应的小方框,模拟按下和放开停止按钮。可以看到Q4.0变为0状态,电动机停机。同时控制制动的Q4.1变为1状态,经过程序设置的延时时间后,Q4.1变为0状态。

6.功能块的仿真练习

在项目“FB例程”的OB1中,再调用一次FB1,背景数据块为DB2,注意两次调用时FB1的实参的地址不能重叠。

打开PLCSIM,将所有的块下载到仿真PLC,将仿真PLC切换到RUN-P模式。打开OB1,单击工具栏上的 978-7-111-53804-2-Chapter04-14.jpg 按钮,启动程序状态监控功能。

分别改变两次调用FB1的Start、Stop和Speed的实参的值,观察它们的输出参数的变化是否符合程序的要求。 978-7-111-53804-2-Chapter04-15.jpg

7.功能与功能块的区别

FB和FC均为用户编写的子程序,变量声明表中均有IN、OUT、IN_OUT和TEMP变量。FC的返回值Ret_Val实际上属于输出参数。下面是FC和FB的区别:

1)功能块有背景数据块,功能没有背景数据块。只能在功能内部访问功能的局部变量,其他逻辑块可以访问背景数据块中的变量。

2)功能没有静态变量(STAT),功能块有保存在背景数据块中的静态变量。

功能如果有执行完后需要保存的数据,只能用全局数据区(例如共享数据块和M区)保存,但是这样会影响功能的可移植性。如果功能或功能块的内部不使用全局变量,只使用局部变量,不需要做任何修改,就可以将它们移植到其他项目。如果块的内部使用了全局变量,在移植时需要重新统一分配所有的块内部使用的全局变量的地址,以保证不会出现地址冲突。当程序很复杂,逻辑块很多时,这种重新分配全局变量地址的工作量非常大,也很容易出错。如果逻辑块有执行完后需要保存的数据,显然应使用功能块,而不是功能。

3)功能块的局部变量(不包括TEMP)有初始值,功能的局部变量没有初始值。在调用功能块时如果没有设置某些输入、输出参数的实参,将使用背景数据块中的初始值,或使用上一次执行后的参数值。调用功能时应给所有的输入、输出参数指定实参。

4)功能块的输出参数不仅与来自外部的输入参数有关,还与用静态变量保存的内部状态数据有关。功能因为没有静态变量,相同的输入参数产生的执行结果是相同的。

8.组织块与FB和FC的区别

事件或故障出现时,由操作系统调用对应的组织块,其他逻辑块是用户程序调用的。

组织块没有输入参数、输出参数和静态变量,只有临时局部变量。组织块自动生成的20B临时局部变量包含了与触发组织块的事件有关的信息(见表4-3),它们由操作系统提供。组织块中的程序是用户编写的,用户可以自己定义和使用组织块前20B之后的临时局部数据。

9.时间标记冲突与一致性检查

调用FB1以后,如果又在FB1的变量声明表中生成一个新的输入参数,在保存FB1时,将会出现块产生接口冲突的警告消息。

双击打开OB1,出现的小对话框显示“至少一个块调用有时间标记冲突”。单击“确定”按钮后打开OB1,可以看到FB1的方框和形参、实参均为红色。关闭OB1,返回SIMATIC管理器。选中左边窗口的“块”,执行菜单命令“编辑”→“检查块的一致性”。

在“检查块的一致性”视图(见图4-9左边的图),可以看到OB1和DB1左边红色的故障指示灯。单击工具栏最左边的编译按钮 978-7-111-53804-2-Chapter04-16.jpg ,出现要求关闭程序编辑器的“编译”对话框(见图4-9上面的小图)。单击“确定”按钮,开始编译。编译结束后,时间标记冲突被消除,红色的故障指示灯全部消失(见图4-9右下角的图),下面的编译信息显示没有错误和警告。打开OB1,可以看到FB1方框的红色消失,方框左边出现新增加的输入参数。

如果用上述方法不能自动清除时间标志冲突,只能删除有冲突的块,然后重新调用修改参数以后的块。

978-7-111-53804-2-Chapter04-17.jpg

图4-9 检查块的一致性

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

我要反馈