首页 理论教育 生成与调用功能块的优化方法

生成与调用功能块的优化方法

时间:2023-06-29 理论教育 版权反馈
【摘要】:图4.13FB1的界面区图4.14FB1的背景数数据块生成功能块的输入、输出参数和静态变量时,它们被自动指定一个默认值,这些可以修改默认值。图4.16定时器的数据结构5.在OB1中调用FB1在PLC变量表中生成两次调用FB1使用的符号地址。图4.19界面更新对话框7.调用功能块的实验将程序块下载到CPU后,切换到RUN模式。调用功能时应给所有的形参指定实参。有的组织块自动生成的临时局部变量包含了与启动组织块的事件有关的信息,它们是由操作系统提供的。

生成与调用功能块的优化方法

1.功能块

功能块(FB)是用户编写的有自己的存储区(背景数据块)的块。FB的典型应用是执行不能在一个扫描周期结束的操作。每次调用功能块时,都需要指定一个背景数据块。后者随功能块的调用而打开,在调用结束时自动关闭。功能块的输入、输出参数和静态变量(Static)用指定的背景数据块保存,但是不会保存临时局部变量中的数据。功能块执行完后,背景数据块中的数据不会丢失。

2.生成功能块

打开项目树中的文件夹“\PLC_1\程序块”,双击其中的“添加新块”,点击打开的对话框中的“功能块”按钮,FB默认的编号为1,语言为LAD(梯形图)。设置功能的名称为“Motor”,功能和功能块的名称也可以使用汉字。点击“确认”按钮,自动生成FBl,可以在项目树的文件夹“\PLC_ 1\程序块”中看到新生成的FB1(见图4.8)。

3.生成功能块的局部变量

将鼠标的光标放在FB1的程序区最上面的分隔条上,按住鼠标的左键,往下拉动分隔条,分隔条上面是功能块的界面区(见图4.13)。与生成功能块相同,功能块的局部变量中也有Input(输入)、Output(输出)、InOut(输入输出)参数和Temp(临时)数据。功能块执行完后,下一次重新调用它时,其Static(静态)变量的值保持不变。背景数据块中的变量就是其功能块的局部变量中的Input、Output、InOut参数和Static变量(见图4.13和图4.14)。功能块的数据永久性地保存在它的背景数据块中,在功能块执行完后也不会丢失,以供下次执行时使用。其他代码块可以访问背景数据块中的变量。不能直接删除和修改背景数据块中的变量,只能在它的功能块的界面区中删除和修改这些变量。

图4.13 FB1的界面区

图4.14 FB1的背景数数据块

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

4.编写FB1的程序

FB1的控制要求如下:用输入参数“启动按钮”和“停止按钮”控制输出参数“电动机”。按下停止按钮,断电延时定时器(TOF)开始定时,输出参数“制动器”为1状态,经过输入参数“定时时间”设置的时间预置值后,停止制动。如图4.15所示为FB1中的程序。

图4.15 FBl中的程序

TOF的参数用静态变量TimerDB来保存,其数据类型为IEC_Timer。图4.16是FB1的界面区中静态变量TimerDB内部的数据。

图4.16 定时器的数据结构

5.在OB1中调用FB1

在PLC变量表中生成两次调用FB1使用的符号地址(见图4.17)。将项目树中的FB1拖放到程序区的水平“导线”上(见图4.18)。在出现的“调用选项”对话框中,输入背景数据块的名称。点击“确认”按钮,自动生成FB1的背景数据块。为各形参指定实参时,可以使用变量表中定义的符号地址。也可以使用绝对地址,然后在变量表中修改自动生成的符号的名称。(www.xing528.com)

图4.17 PLC变量表

图4.18 0Bl调用FB1的程序

6.处理调用错误

FB1最初没有输入参数“定时时间”。在OB1中调用符号名为“Motor”的FB1之后,在FB1的界面区增加了输入参数“定时时间”,OB1中被调用的FB1的方框和字符变为红色(见图4.19中左图)。点击程序编辑器工具栏上的按钮,出现图4.19所示的“界面更新”对话框,显示出原有的块的界面和新的界面。点击“确认”按钮,OB1 中被调用的FB1被修改为新的界面(见图4.19中右图),FB1中的红色错误标记消失。

图4.19 界面更新对话框

7.调用功能块的实验

将程序块下载到CPU后,切换到RUN模式。拨动外接的小开关,模拟按钮的操作。分别用两台设备的启动按钮启动设备,然后用停止接钮使设备停车,可以看到两台设备的输出参数“电动机”和“制动器”按程序的要求变化,“制动器”为l的时间与输入参数“定时时间”设置相同。可以令两台设备分时工作,也可以令它们同时工作。在运行时可以用OB1的程序状态功能监视被调用的FB1的输入、输出参数的状态,也可以在线监视FB1内部的程序的执行情况。

8.功能与功能块的区别

FB和FC均为用户编写的子程序,界面区中均有Input、Output、InOut参数和Temp数据。FC的返回值Ret_Val实际上属于输出变量。下面是FC和FB的区别:

(1)功能块有背景数据块,功能没有背景数据块。

(2)只能在功能内部访问它的局部变量。其他代码块或HMI(人机界面)可以访问功能块的背景数据块中的变量。

(3)功能没有静态变量(Static),功能块有保存在背景数据块中的静态变量。功能如果有执行完后需要保存的数据,只能存放在全局变量(例如全局数据块和M区)中,但是这样会影响功能的可移植性。如果功能或功能块的内部不使用全局变量,只使用局部变量,不需要作任何修改,就可以将它们移植到其他项目。如果块的内部使用了全局变量,在移植时需要考虑块使用的全局变量是否会与别的块产生地址冲突。

(4)功能块的局部变量(不包括Temp)有默认值(初始值),功能的局部变量没有初始值。在调用功能块时如果没有设置某些输入、输出参数的实参,将使用背景数据块中的初始值。调用功能时应给所有的形参指定实参。

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

(1)对应的事件发生时,由操作系统调用组织块,FB 和 FC 是用户程序在代码块中调用的。

(2)组织块没有输入、输出变量和静态变量,只有临时局部变量。有的组织块自动生成的临时局部变量包含了与启动组织块的事件有关的信息,它们是由操作系统提供的。

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

我要反馈