1.用于定时器计数器的多重背景
打开项目视图,生成一个名为“多重背景”的新项目(见随书光盘中的同名例程),CPU为CPU1214C。打开项目树中的文件夹“\PLC_1\程序块”,生成名为“电磁阀控制”的函数块FB2,去掉它的“优化的块访问”属性。
FB2用来控制卫生间的冲水阀,图4-18中的程序与图3-23中的差不多。在FB2的接口区生成输入、输出参数(见图4-17),“使用者”是有人使用卫生间的信号,“电磁阀”是要控制的冲水电磁阀。程序中的TOF_DB.Q是TOF定时器的背景数据块中定时器的Q输出信号。
每次调用IEC定时器和IEC计数器指令时,都需要指定一个背景数据块(见图3-23)。如果这类指令很多,将会生成大量的数据块“碎片”。为了解决这个问题,在函数块中使用定时器、计数器指令时,可以在函数块的接口区定义数据类型为IEC_Timer(IEC定时器)或IEC_Counter(IEC计数器)的静态变量(见图4-17),用这些静态变量来提供定时器和计数器的背景数据。这种程序结构被称为多重背景。
双击打开FB2,在接口区生成数据类型为IEC_TIMER的静态变量TON_DB、TP_DB和TOF_DB(见图4-17的左图)。将定时器TON拖放到程序区,出现“调用选项”对话框。单击选中“多重背景”(见图4-17的右图),对话框中有对多重背景的解释。用选择框选中列表中的“TON_DB”,用FB2的静态变量“TON_DB”提供TON的背景数据。用同样的方法在FB2中调用定时器指令TP和TOF,用FB2的静态变量“TP_DB”和“TOF_DB”提供TP和TOF的背景数据。
图4-17 FB2的接口区与“调用选项”对话框
这样处理后,多个定时器或计数器的背景数据被包含在它们所在的函数块的背景数据块中,不再需要为每个定时器或计数器设置一个单独的背景数据块。因此减少了处理数据的时间,能更合理地利用存储空间。在共享的多重背景数据块中,定时器、计数器的数据结构之间不会产生相互作用。
图4-18 FB2的程序
在PLC变量表(见图4-19)中定义调用FB2需要的变量,在OB1中两次调用FB2的背景数据块分别为“电磁阀控制DB1”和“电磁阀控制DB2”(见图4-20)。
图4-19 PLC变量表
(www.xing528.com)
图4-20 OB1调用FB2的程序
将用户程序下载到CPU,将CPU切换到RUN模式。拨动外接的小开关,模拟有人使用卫生间的“使用者”信号。可以看到输出参数“电磁阀”的状态按程序的要求变化,各段定时时间与FB2中设置的相同。可以令两次调用FB2的输入信号“使用者1”和“使用者2”几乎同时为1状态和同时为0状态。在运行时可以用主程序OB1的程序状态功能监视被调用的FB2的输入、输出参数的状态,也可以在线监视FB2内部的程序的执行情况。
此外,也可以用仿真的方法调试电磁阀控制程序。
2.用于用户生成的函数块的多重背景
在项目“多重背景”中生成与4.1.2节相同的名为“电动机控制”的函数块FB1,其接口区和程序分别如图4-6和图4-9所示,去掉FB1“优化的块访问”属性。
为了实现多重背景,生成一个名为“多台电机控制”的函数块FB3,去掉FB3“优化的块访问”属性。在它的接口区生成两个数据类型为“电动机控制”的静态变量“1号电动机”和“2号电动机”(见图4-21)。每个静态变量内部的输入参数、输出参数等局部变量是自动生成的,与FB1“电动机控制”的相同。
图4-21 FB3的接口区与OB1调用FB3的程序
双击打开FB3,调用FB1“电动机控制”(见图4-22),出现“调用选项”对话框(见图4-21的右图)。单击选中“多重背景DB”,再单击按钮,选中列表中的“1号电动机”,用FB3的静态变量“1号电动机”(见图4-21的左图)提供名为“电动机控制”的FB1的背景数据。用同样的方法在FB3中再次调用FB1,用FB3的静态变量“2号电动机”提供FB1的背景数据。
图4-22 在FB3中两次调用FB1
在OB1中调用FB3“多台电机控制”(见图4-21右下角的小图),其背景数据块为“电机控制DB”(DB3)。FB3的背景数据块与图4-21中FB3的接口区的变量相同,均只有静态变量“1号电动机”和“2号电动机”。两次调用FB1的背景数据在FB3的背景数据块DB3中。
将用户程序下载到仿真PLC,CPU切换到RUN模式。在SIM表1中生成地址IB0和QB0,用I0.0和I0.2分别启动1号、2号电动机,用I0.1和I0.3分别停止1号、2号电动机,电动机和制动器的状态变化满足FB1“电动机控制”的要求。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。