[西门子] 如何生成和调用西门子S7-1200 PLC的功能块

[复制链接]
查看198 | 回复0 | 2024-8-4 13:24:46 | 显示全部楼层 |阅读模式
>本篇我们来介绍如何生成和调用西门子S7-1200 PLC的功能块。功能块简称为FB,是用户编写的有自己的存储区的子程序。FB主要用来执行不能在一个扫描周期结束的操作。每次调用功能块时都需要指定一个背景数据块,后者随功能块的调用而打开,在调用结束时自动关闭。

首先生成一个名为功能块应用的项目,添加一个pierce设备,打开项目树中的文件夹PLC1程序块,双击其中的添加新块,点击打开的对话框中的功能块按钮,生成的功能块默认的编号为FB1。将功能块的名称改为motor。功能块的名称也可以使用汉字,点击确认按钮生成FB1。可以在项目树中看到新生成的FB1。

将鼠标的光标放在FB1的程序区最上面的分隔条上,按住鼠标的左键往下拉动分隔条。分隔条上面是功能块的界面区,下面是程序区。界面区中生成的局部变量,只能在它所在的块内使用。局部变量的名称由包括汉字在内的字符数字组成,功能有5种局部变量,第一种是输入参数,用它来接收调用它的块提供的输入数据。第二种是输出参数,用它来将程序执行结果返回给调用它的块。第三种是输入输出参数,它的初值由调用它的块提供,块执行完以后,通过它将执行结果返回给调用它的块。第四种是静态变量,功能块执行完以后,下一次重新调用它的时候,静态变量的值保持不变。第五种是临时数据,用它来暂时保存在局部数据堆栈中的数据,只是在执行快的时候使用临时数据,块执行完了以后,它的值可能被别的块的临时数据覆盖。

首先生成两个数据类型为布尔的输入参数,然后生成一个名为定时时间的输入参数设置,它的数据类型为time。下面我们再来生成一个名为电动机的输出参数,其数据类型也为布尔型。用同样的方法生成另一个输出参数,下面再来生成一个名为timer DB的静态变量。设置它的数据类型为i ec timer。就是IEC定时器的意思。

现在我们关闭下面的巡视窗口,生成用户程序功能块的输入输出参数和静态变量,用指定的背景数据块保存。功能块执行完以后,背景数据块中的数据不会丢失,以供下次执行时使用。其他的代码块也可以访问背景数据块中的变量。
生成功能块的输入输出参数和静态变量的时候,它们被自动地指定一个默认值,用户可以修改这些默认值。变量的默认值被传送给功能块的背景数据块,作为同一个变量的初始值,可以在背景数据块中修改变量的初始值。下面我们生成了FB1中的程序,可以直接将局部变量拖放到FB1的提醒中。比如说选中启动按钮,可以把这个输入变量拖放到这个触点的上面。用同样的方法设置好其他地址。

Step 7 basic在局部变量的前面自动的添加井号,定时器TOF的参数,用静态变量timer DB来保存。打开time DB可以看到定时器内部的数据。FB1的控制要求如下,用输入参数启动按钮和停止按钮来控制输出参数。电动机按下停止按钮,断电延时定时器TOF开始定时输出参数制动器唯一状态。经过输入参数定时时间设置的时间预置值以后,停止制动。
点击工具栏上的保存项目按钮,保存FB1,然后关闭它。双击打开主程序OB1,然后关闭界面区,将项目树中的FB1拖放到水平电源线上。在自动打开的调用选项对话框中,可以设置生成的背景数据块的属性。比如说可以修改它的名称,它的编号被自动分配为DB1,点击确定按钮确认,这样就生成了调用FB1的时候的背景数据块。

FB1的方框中,左边是在FB1的界面区中定义的输入参数,右边在界面区中定义的输出参数,他们被统称为FB1的形式参数,简称为形参。形参在FB1内部的程序中使用,需要为每一个形参指定实际的参数,可以是地址,也可以是常数。这些实际的参数简称为实参,在PLC变量中生成两次调用FB1使用的符号地址。打开PLC的变量表,这里边就是为了调用FB1设置的符号地址。选中项目数中的PLC变量,下面的详细视图中列出了PLC变量表中的变量。关闭变量表,可以直接把详细视图里面的变量拖放到OB1中。作为调用FB1的实参,比如可以把变量启动按钮一拖放到这个位置,作为形参启动按钮的实参,它的绝对地址是I0.0用同样的方法设置其他形参的时间,设置定时时间为常数。
用同样的方法再调用一次FB1,将它的背景数据块的名称的第二个下划线去掉,点击确定按钮确认。用同样的方法设置第二次调用FB的实参。现在保存一下项目。

下面我们来比较一下功能块的局部变量与背景数据块中的变量。双击打开FB1可以看到它的界面区中的局部变量,再双击打开FB1的背景数据块DB1,可以看到背景数据块包含了FB1的局部变量中的输入参数、输出参数和静态变量,不包括临时变量。背景数据块中的变量是自动生成的,不能在背景数据块中直接修改和删除里边的变量,只能在它的功能块的界面区中删除或者修改这些局部变量。选中PLC,将用户程序下载到CPU。

点击工具栏上的启用禁用监视按钮,启动程序状态功能。为了监视方便,我们现在将显示方式设置为绝对地址显示。关闭下面的巡视窗口,搬动接在I0.0输入端的小开关,模拟按下和放开启动按钮一可以看到输出变量电动机由于FB1内部程序的作用变为一状态。再来搬动接在I0.1输入端的停止按钮对应的小开关,模拟按下和放开停止按钮,可以看到电动机变为零状态,制动器变为一状态。经过FB1内部的定时器的延时以后,制动器自动的变为零状态。
下面我们再来检查程序段2第二次调用FB1的程序的情况。搬动接在I0.2输入端的小开关模拟按下和放开启动按钮2可以看到输出变量,电动机变为一状态。搬动接在I0.3输入端的小开关模拟按下和放开停止按钮2可以看到电动机变为零状态,制动器变为一状态。经过FB1内部的定时器延时以后,制动器变为零状态。

下面我们再来看一下两台设备同时运行的情况。搬动I0.0对应的小开关,启动一号设备,电动机变为一状态,再来搬动I0.2对应的小开关。电动机也变为一状态。现在我们再来搬动I0.1对应的小开关,使一号设备停机,电动机变为零状态,制动器变为一状态。再来搬动I0.3对应的小开关,可以看到电动机也变成了零状态。经过设置的延时时间以后,制动器变为零状态。
现在关闭监视功能,切换到离线,打开FB1,我们来增加一个输出变量。变量的名称为时间值。变量的数据类型为双整数DINT。点击工具栏上的按钮保存项目,然后再打开主程序OB1。可以看到,因为在调用FB1以后又增加了FB1的输出变量,所以OB1中的FB1,它的方框和中间的变量变为红色。点击工具栏上的更新不一致的块调用按钮,自动的消除了错误。在FB1的输出端可以看到新增加的输出变量时间值。

关注本号学习更多PLC编程知识!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则