首页 理论教育 如何生成和调用函数?

如何生成和调用函数?

时间:2023-06-30 理论教育 版权反馈
【摘要】:1)Input:用于接收调用它的主调块提供的输入数据。4)文件夹Return中自动生成的返回值“计算压力”与函数的名称相同,属于输出参数,其值返回给调用它的块。图4-2 FC1的压力计算程序5.在OB1中调用FC1在变量表中生成调用FC1时需要的3个变量,IW64是CPU集成的模拟量输入的通道0的地址。别的代码块调用FC时,需要为每个形参指定实际的参数,简称为实参。

如何生成和调用函数?

1.函数的特点

2.2.3节简单介绍了用户程序的结构。S7-1200/1500的用户程序由代码块和数据块组成。代码块包括组织块、函数和函数块,数据块包括全局数据块和背景数据块。

函数(Function,FC)和函数块(Function Block,FB)是用户编写的子程序,它们包含完成特定任务的程序。FC和FB有与调用它的块共享的输入、输出参数,执行完FC和FB后,将执行结果返回给调用它的代码块。

STEP7V5.5将Function和FunctionBlock翻译为功能和功能块。

压力变送器的量程下限为0MPa,上限为HighMPa,经A-D转换后得到0~27648的整数。下式是转换后的数字N和压力P之间的计算公式:

P=(High×N)/27648(MPa) (4-1)

用函数FC1实现上述运算,在OB1中调用FC1。

2.生成函数

打开STEP7的项目视图,生成一个名为“函数与函数块”的新项目(见随书光盘中的同名例程)。双击项目树中的“添加新设备”,添加一块CPU1214C。

打开项目视图中的文件夹“\PLC_1\程序块”,双击其中的“添加新块”(见图4-1),打开“添加新块”对话框(见图2-18),单击其中的“函数”按钮,FC默认的编号为1,默认的语言为LAD(梯形图)。设置函数的名称为“计算压力”。单击“确定”按钮,在项目树的文件夹“\PLC_1\程序块”中可以看到新生成的FC1。

3.生成函数的局部变量

将鼠标的光标放在FC1的程序区最上面标有“块接口”的水平分隔条上,按住鼠标左键,往下拉动分隔条,分隔条上面是函数的块接口(Interface)区(见图4-1),下面是程序区。将分隔条拉至程序编辑器视窗的顶部,不再显示接口区,但是它仍然存在。

在接口区中生成局部变量,后者只能在它所在的块中使用。在Input(输入)下面的“名称”列生成输入参数“输入数据”,单击“数据类型”列的978-7-111-58719-4-Chapter04-1.jpg按钮,用下拉式列表设置其数据类型为Int(16位整数)。用同样的方法生成输入参数“量程上限”、输出参数(Output)“压力值”和临时数据(Temp)“中间变量”,它们的数据类型均为Real。

用鼠标右键单击项目树中的FC1,单击快捷菜单中的“属性”,选中打开的对话框左边的“属性”,用鼠标去掉复选框“块的优化访问”中的勾。单击工具栏上的“编译”按钮978-7-111-58719-4-Chapter04-2.jpg,成功编译后FC1的接口区出现“偏移量”列,只有临时数据才有偏移量。在编译时,程序编辑器自动地为临时局部变量指定偏移量。

978-7-111-58719-4-Chapter04-3.jpg

图4-1 项目树与FC1接口区的局部变量

函数各种类型的局部变量的作用如下。

1)Input(输入参数):用于接收调用它的主调块提供的输入数据。

2)Output(输出参数):用于将块的程序执行结果返回给主调块。

3)InOut(输入/输出参数):初值由主调块提供,块执行完后用同一个参数将它的值返回给主调块。

4)文件夹Return中自动生成的返回值“计算压力”与函数的名称相同,属于输出参数,其值返回给调用它的块。返回值默认的数据类型为Void,表示函数没有返回值。在调用FC1时,看不到它。如果将它设置为Void之外的数据类型,在FC1内部编程时可以使用该输出变量,调用FC1时可以在方框的右边看到它,说明它属于输出参数。返回值的设置与IEC6113-3标准有关,该标准的函数没有输出参数,只有一个与函数同名的返回值。

函数还有下面两种局部数据。

1)Temp(临时局部数据):用于存储临时中间结果的变量。同一优先级的OB及其调用的块的临时数据保存在局部数据堆栈中的同一片物理存储区,它类似于公用的布告栏,大家都可以往上面贴布告,后贴的布告将原来的布告覆盖掉。只是在执行块时使用临时数据,每次调用块之后,不再保存它的临时数据的值,它可能被同一优先级中后面调用的块的临时数据覆盖。调用FC和FB时,首先应初始化它的临时数据(写入数值),然后再使用它,简称为“先赋值后使用”。

2)Constant(常量):是在块中使用并且带有声明的符号名的常数。(www.xing528.com)

4.FC1的程序设计

首先用CONV指令将参数“输入数据”接收的A-D转换后的整数值(0~27648)转换为实数(Real),再用实数乘法指令和实数除法指令完成式(4-1)的运算(见图4-2)。运算的中间结果用临时局部变量“中间变量”保存。STEP 7自动地在局部变量的前面添加#号,例如“#输入数据”。

978-7-111-58719-4-Chapter04-4.jpg

图4-2 FC1的压力计算程序

5.在OB1中调用FC1

在变量表中生成调用FC1时需要的3个变量(见图4-3),IW64是CPU集成的模拟量输入的通道0的地址。将项目树中的FC1拖放到右边的程序区中(见图4-4)。FC1的方框中左边的“输入数据”等是在FC1的接口区中定义的输入参数和InOut参数,右边的“压力值”是输出参数。它们被称为FC的形式参数,简称为形参,形参在FC内部的程序中使用。别的代码块调用FC时,需要为每个形参指定实际的参数,简称为实参。实参在方框的外面,实参(例如“压力转换值”)与它对应的形参(“输入数据”)应具有相同的数据类型。STEP7自动地在程序中的全局变量的符号地址两边添加双引号

实参可以是变量表和全局数据块中定义的符号地址或绝对地址,也可以是调用FC1的块(例如本例的OB1)的局部变量。

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

图4-3 PLC变量表

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

图4-4 OB1调用FC1的程序

块的Output(输出)和InOut(输入/输出)参数不能用常数来作实参。它们用来保存变量值,例如计算结果,因此其实参应为地址。只有Input(输入参数)的实参能设置为常数。

6.函数应用的实验

选中项目树中的PLC_1,将组态数据和用户程序下载到CPU,将CPU切换到RUN模式。

在CPU集成的模拟量输入的通道0的输入端输入一个DC0~10V的电压,用程序状态功能监视FC1或OB1中的程序。调节该通道的输入电压,观察MD18中的压力计算值是否与理论计算值相同。

也可以通过仿真来调试程序。选中项目树中的PLC_1,单击工具栏上的“开始仿真”按钮978-7-111-58719-4-Chapter04-7.jpg,出现S7-PLCSIM的精简视图。将程序下载到仿真PLC,后者进入RUN模式。单击精简视图右下角的978-7-111-58719-4-Chapter04-8.jpg按钮,切换到项目视图(见图4-5)。双击打开项目树中的“SIM表1”,在表中输入有关的变量。

978-7-111-58719-4-Chapter04-9.jpg

图4-5 S7-PLCSIM的SIM表1

勾选IB0所在行I0.6对应的小方框,I0.6的常开触点接通,调用FC1。在第二行的“一致修改”列输入13824(27648的一半),单击工具栏上的“修改所有选定值”按钮978-7-111-58719-4-Chapter04-10.jpg,13824被送给IW64后,被传送给FC1的形参“输入数据”。执行FC1中的程序后,输出参数“压力值”的值5.0MPa被传送给它的实参“压力计算值”MD18。

7.为块提供密码保护

用鼠标右键单击项目树中的FC1,执行快捷菜单命令“专有技术保护”,单击打开的对话框中的“定义”,在“定义密码”对话框中输入密码和密码的确认值。两次单击“确定”按钮后,项目树中FC1的图标变为有一把锁的符号978-7-111-58719-4-Chapter04-11.jpg,表示FC1受到保护。双击打开FC1,需要在出现的对话框中输入密码,才能看到程序区的程序。

用鼠标右键单击项目树中已加密的FC1,执行快捷菜单命令“专有技术保护”,单击打开的对话框中的复选框“隐藏代码”,去掉其中的勾。输入密码,单击“确定”按钮,FC1的密码保护被解除。项目树中FC1的图标上一把锁的符号消失。

块加密后,需要关闭TIA博途,再打开后才能对关闭前加密的块解除密码。

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

我要反馈