FC是功能,相当于子程序或函数,不具备自己的存储区,可以在共享DB里定义数据。如果某项功能多处可以用到,则将其进行功能化编程,在OB1或其他功能/功能块中调用,不仅简化代码,而且有利于程序调试,增强程序可读性。
功能的使用可分为无参数调用和有参数调用。
无参数调用就是FC块不从外部或者主调程序中接收参数,也不向外部发出参数。在FC中直接使用绝对地址完成控制程序的编程,如图7-83网络1所示FC1的应用。这种方式一般应用于分块结构的程序编写,每个功能实现整个控制任务的一部分,不重复调用。
有参数调用则需要从主调程序接收参数,将接收到的参数处理完毕后将处理结果再返还给调用程序,如图7-83网络2所示FC2的应用。有参数调用是在编辑FC功能块时在局部变量声明表内定义了形参,并使用虚拟的符号地址完成控制程序的编写,以便在其他块中能重复调用有参功能FC。这种方式一般用于结构化程序编写。
图7-81 功能的使用
【例7-2】根据控制要求实现水塔高位水箱水位的自动控制。
水塔水箱水位自动控制系统如图7-84所示。其中Lgh、Lgl分别为水塔高位水箱的高、低水位传感器;Ldh、Ldl为低位补给水箱的高、低水位传感器;YV为电磁阀,用来控制补水阀门;M为电动机,用来拖动水泵对高位水箱供水。
图7-84 水塔高位水箱水位控制示意图
高位水箱的控制:为保证用户用水,要求始终保持高位水箱水位在Lgl与Lgh之间。当高位水箱水位低于Lgl时,水泵起动,从低位水箱抽水补给高位水箱,到达水位Lgh时,水泵自动停止。
低位水箱的控制:当水位低于低位供给水箱Ldl时,电磁阀YV得电后开启,对低位水箱补水,水位到达Ldh时,电磁阀YV失电,阀门闭合,停止补水。
1.控制要求
1)当低位补给水箱水位低于低水位时(Ldl为ON),电磁阀YV打开补水(YV为ON),定时器开始定时(设时为2s),2s以后,如果Ldl仍为ON,则阀YV指示灯XD闪烁,表示阀YV没有进水,出现故障;如正常,则补水至高水位传感器Ldh为ON后,阀YV关闭(YV为OFF)。
2)当低水箱水位高于低水位(Ldl为OFF),且水塔水位低于低水位界时(Lgl为ON),电动机M运转,开始抽水补给高位水箱。当水塔水位高于水塔高水位界时(Lgh为ON),电动机M停止。
2.设计分析
根据控制要求有四个输入器件分别为水位传感器Lgh、Lgl和Ldh、Ldl;三个输出负载分别为电磁阀YV、电动机M和指示灯XD,PLC的I/O地址分配见表7-17。
表7-17 PLC的I/O地址分配表
整个控制程序根据功能可划分为4个部分,即闪烁控制功能(FC1)、低水箱水位控制功能(FC2)、高水箱水位控制功能(FC3)以及故障显示功能(FC4)。程序设计步骤如下。
(1)建立FC模块
在SIMATIC Manager界面右边显示栏,分别建立FC1、FC2、FC3及FC4功能,如图7-85所示。
图7-85 FC模块的建立
(2)编写FC程序
双击图7-85所示FC1模块,进入FC1模块的程序编写界面,如图7-86所示,界面的上半部分为变量声明表,下半部分为程序指令部分。
图7-86 FC1程序
通过网络1和网络2逻辑关系,M0.0可以获得周期为1s的方波波形,可以用M0.0的动合触点来接通指示灯Q0.2,使得Q0.2状态具有与M0.0同样的变化频率,用法如图7-89所示。
分别打开FC2、FC3、FC4功能模块,编写FC2、FC3、FC4程序如图7-87~图7-89所示。
图7-87 FC2程序
图7-88 FC3程序
图7-89 FC4程序(www.xing528.com)
在图7-87中,当低水箱液位低于低水位I0.3时,电磁阀打开给水箱充水。由于水位淹没低水位开关后,低水位开关I0.3要改变状态,不能再维持Q0.1接通,所以需要Q0.1实现自保持;当水位高于水箱的高水位时,高水位开关动作即I0.2得电,其动断触点断开,Q0.1失电,电磁阀关闭,停止进水;若电磁阀故障,高水位开关I0.2不动作,则2s后T3的动合触点闭合,如图7-89所示,指示灯电路接通,同时辅助继电器M0.1线圈得电,则电磁阀也会关闭。
在图7-88中,当水塔高位水箱的水位低于低水位界I0.1时,电动机M工作,水泵从低水位往水塔抽水。由于水位淹没低水位开关后I0.1要改变状态,不能再维持Q0.0接通的状态,所以需要Q0.0实现自保持;当水位高于高水位界时高水位开关动作即I0.0得电,其动断触点断开,Q0.0失电,电动机停止工作。若低水箱水位在低水位界之下(I0.3为ON),即使高位水箱需要抽水也不能起动电动机工作。
在图7-89中,T3的动合触点闭合,说明电磁阀已经接通2s,若低水箱低水位开关仍然没有改变状态,则电磁阀YV出现故障,故障指示灯XD亮。为满足指示灯闪烁要求,将时钟脉冲的触点M0.0也作为Q0.2动作的条件。
(3)OB1程序
在OB1主程序中无条件调用功能FC1~FC4,如图7-90所示,程序结构如图7-91所示。
图7-90 建立OB1程序
图7-91 OB1程序
(4)系统联调
将项目下载至CPU中,包括硬件配置、OB1程序、FC1、FC2、FC3以及FC4功能程序,在线调试和运行系统。
【例7-3】设计函数模块,计算Y=AX2+BX+C值,且函数系数可变。
1)在SIMATIC Manager界面右侧显示栏,建立FC1模块,如图7-92所示。
图7-92 FC1模块的建立
2)双击图7-92所示FC1模块,进入FC1模块的程序编写界面,如图7-93所示。
为FC1功能分别定义Interface参数,如图7-94~图7-96所示。当设置输入、输出和输入/输出类型参数时,用户需要在程序声明中声明块调用的“接口”;当变量声明后,就会在本地数据堆栈中为临时变量保留一个有效的存储空间。
图7-93 FC1程序界面
图7-94 建立输入参数
图7-95 建立输出参数
图7-96 建立临时变量
3)编写FC1程序。为满足Y=AX2+BX+C计算功能,编写FC1程序如图7-97所示。
图7-97 FC1程序
4)OB1程序。在OB1主程序中调用功能FC1,如图7-98所示,程序在线运行结果如图7-99所示。
图7-98 FC1的调用
图7-99 OB1在线监控
由于FC功能块的逻辑计算完全靠模块的输入/输出接口上的地址提供数据源,若想修改A、B、C的值,必须也把A、B、C作为模块的输入变量。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。