1.生成功能块
功能块是用户编写的有自己的存储区(背景数据块)的逻辑块,功能块的输入、输出参数和静态变量(STAT)用指定的背景数据块(DI)存放,临时变量存储在局部数据堆栈中。功能块执行完后,背景数据块中的数据不会丢失,但是不会保存它的临时变量。
调用功能块和系统功能块时需要为它们指定一个背景数据块,后者随功能块的调用而打开,在调用结束时自动关闭。
用新建项目向导生成一个名为“FB例程”的项目(见随书光盘中的同名例程),CPU为CPU 315-2DP。执行SIMATIC管理器的菜单命令“插入”→“S7块”→“功能块”,在出现的“属性-功能块”对话框中(见图4-5),默认的名称为FB1,将创建语言设置为LAD(梯形图)。单击“多情景标题”(有的版本为多重背景)复选框,去掉其中的,取消多重背景功能。单击“确定”按钮后,在SIMATIC管理器右边窗口出现FB1。
图4-5 FB1的属性对话框
2.生成局部变量
控制要求如下:用输入参数“Start”(起动按钮)和“Stop”(停止按钮)控制输出参数“Motor”(电动机)。按下停止按钮,输入参数TOF指定的断电延时定时器开始定时,输出参数“Brake”(制动器)为1状态,经过设置的时间预置值后,停止制动。图4-6的上面是FB1的变量声明表,下面是程序。
输入参数Speed(实际转速)与静态变量PreSpeed(预置转速)比较,实际转速大于预置转速时,输出参数OverSpeed(转速过高,Bool变量)为1状态。
块的输入、输出参数的数据类型可以使用基本数据类型、复杂数据类型、Timer(定时器)、Counter(计数器)、块(FB、FC、DB)、Pointer(指针)、ANY等。
本例程的输入参数TOF的数据类型为Timer,实参应为定时器的编号(例如T1)。
图4-6 FB1的局部变量表与程序
从功能块执行完,到下一次重新调用它,其静态变量(STAT)的值保持不变。
3.在OB1中调用FB1
双击打开OB1,执行菜单命令“视图”→“总览”,显示出左边的指令列表。打开FB文件夹,将其中的FB1拖放到程序区的水平“导线”上(见图4-7)。双击方框上面的红色“”,输入背景数据块的名称DB1,按回车键后出现的对话框询问“实例数据块DB1不存在,是否要生成它?”。单击“是”按钮确认,打开SIMATIC管理器,可以看到自动生成的DB1。
也可以首先生成FB1的背景数据块(见图4-8),然后在调用FB1时使用它。应设置生成的数据块为背景数据块,如果有多个功能块,还应设置是哪一个功能块的背景数据块。
图4-7 OB1调用FB1的程序状态
图4-8背景数据块的属性对话框
4.背景数据块
背景数据块中的变量就是其功能块的局部变量中的IN、OUT、IN_OUT和STAT变量(见图4-6和图4-9)。功能块的数据永久性地保存在它的背景数据块中,功能块执行完后也不会丢失,以供下次执行时使用。其他代码块可以访问背景数据块中的变量。不能直接删除和修改背景数据块中的变量,只能在它的功能块的变量申明表中删除和修改这些变量。
生成功能块的输入、输出参数和静态变量时,它们被自动指定一个初始值,可以修改这些初始值。它们被传送给FB的背景数据块,作为同一个变量的初始值。调用FB时没有指定实参的形参使用背景数据块中的初始值。
5.仿真实验
打开PLCSIM,将所有的块下载到仿真PLC,将仿真PLC切换到RUN-P模式。打开OB1,单击工具栏上的按钮,起动程序状态监控功能(见图4-7)。
(www.xing528.com)
图4-9 FB1的背景数据块DB1
单击两次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,单击工具栏上的按钮,起动程序状态监控功能(见图4-7)。
分别改变两次调用FB1的输入参数,观察输出参数的变化是否符合程序的要求。
7.功能与功能块的区别
FB和FC均为用户编写的子程序,局部变量表中均有IN、OUT、IN_OUT和TEMP变量。FC的返回值Ret_Val实际上属于输出参数。下面是FC和FB的区别:
1)功能块有背景数据块,功能没有背景数据块。
2)只能在功能内部访问它的局部变量。其他逻辑块可以访问功能块的背景数据块中的变量。
3)功能没有静态变量(STAT),功能块有保存在背景数据块中的静态变量。
功能如果有执行完后需要保存的数据,只能存放在全局变量(例如全局数据块和M区)中,但是这样会影响功能的可移植性。如果功能或功能块的内部不使用全局变量,只使用局部变量,不需要做任何修改,就可以将它们移植到其他项目。如果块的内部使用了全局变量,在移植时需要考虑每个块使用的全局变量是否会与别的块产生地址冲突。
4)功能块的局部变量(不包括TEMP)有初始值,功能的局部变量没有初始值。在调用功能块时如果没有设置某些输入、输出参数的实参,进入RUN模式时将使用背景数据块中的初始值。调用功能时应给所有的形参指定实参。
8.组织块与FB和FC的区别
1)事件或故障发生时,由操作系统调用对应的组织块,FB和FC是用户程序在逻辑块中调用的。
2)组织块没有输入参数、输出参数和静态参数,只有临时局部变量。组织块自动生成的20B临时局部变量包含了与触发组织块的事件有关的信息,它们由操作系统提供。
9.时间标记冲突与一致性检查
调用FB1后,在FB1的变量声明表中生成一个新的输入参数,保存后关闭FB1。
双击打开OB1,出现的小对话框显示“至少一个块调用有时间标志冲突”。单击“帮助”按钮可以获取解决问题的帮助信息。单击“确定”按钮后打开OB1,可以看到FB1的方框和形参、实参均为红色。关闭OB1,返回SIMATIC管理器。选中左边窗口的“块”,执行菜单命令“编辑”→“检查块的一致性”。
在“检查块的一致性”视图(见图4-10左边的图),可以看到OB1和DB1左边红色的故障指示灯。单击工具栏最左边的编译按钮,出现要求关闭程序编辑器的“编译”对话框(见图4-10上面的小图)。单击“确定”按钮,开始编译。编译结束后,红色的故障指示灯全部消失(见图4-10右下角的图),下面的编译信息显示没有错误和警告。打开OB1,可以看到FB1上的红色消失,方框左边出现新增加的输入参数。
图4-10 检查块的一致性
如果用上述方法不能消除时间标志冲突,只能删除有冲突的块,然后重新调用修改参数后的块。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。