三菱FX3系列PLC功能指令应用全解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3.2 子程序编制与应用实例

如前所述,有两种情况会用到子程序,使编写子程序成为必要。一是系统规模很大、控制要求复杂时,使用子程序可以将程序分成容易管理的小块,使程序结构简单,易于阅读、调试、查错和维护。这类子程序是在特定系统中编制的,相当于主程序的分支转移,子程序中所涉及的各种软元件相对比较独立,也不存在所谓的移植问题。二是有一些程序功能会在程序中反复执行,如某些标定变换运算程序、查询程序、排序程序、报警程序、通信程序中的校验码程序等,这时可将这些程序段编写成子程序,在需要时对其进行调用,从而不需要在主程序中反复重写这些程序段。这样,可使主程序简单清晰,程序容量减少,扫描时间也相应缩短。这类子程序所完成的功能相对比较独立,一个子程序可以看成是一个功能块,通用性很强,可以在任何一个控制系统中进行移植应用。对这类子程序进行开发和收集,会对程序设计工作带来很大的方便。这也是要重点讨论的子程序类型。

和主程序一样,子程序中也使用到编程软元件,子程序中所涉及的软元件有两种,一种是子程序功能本身所需要的软元件,它们的主要特点是仅在子程序中运用,与主程序没有关联,这些软元件是子程序所独有的,可以称为局部软元件。另一种是与主程序相关联的软元件。这些软元件,一类为主程序传递给子程序的数据(子程序的入口数据),一类为子程序完成功能后所需把处理结果送回主程序的数据(子程序的出口数据),这些软元件是主程序和子程序共有的,可以称为全局软元件。不同品牌的PLC对局部软元件和全局软元件的处理是不同的。

西门子的局部软元件和全局软元件是互相独立的(西门子称为局部变量和全局变量)。因此,一个功能块只需要关心它的入口和出口软元件即可,功能块可以很方便地进行移植,控制程序可以像搭积木似的编制。

三菱FX系列PLC软元件是不分局部软元件和全局软元件的。所有软元件都是主程序和子程序共享的,这就存在着一个软元件冲突问题,主要体现在数据寄存器D的地址冲突。在子程序中出现的局部软元件是不能在主程序中出现的,而主程序中的软元件也不能出现在子程序的局部软元件中。

当主程序和子程序使用同一地址的D寄存器时,如果它的含义在主程序和子程序中不,就会出现混乱。这就给子程序的编制和移植带来了很大的不便。因此,在编制子程序时,必须对所用软元件进行统一分配,以避免混乱发生。同样功能的子程序在不同控制系统中移植时,必须要检查子程序与新的主程序有无地址冲突,如果有,则必须对子程序软元件进行修改或对主程序软元件进行修改。在收集各种功能的子程序时,除了记录它的功能,还必须记录子程序的入口软元件、出口软元件和局部软元件。

通过下面的例子给予说明。

【例3】在PLC与控制设备的通信控制中,如果采用了MODBUS通信协议RTU通信方式时,其通信数据规定采用CRC校验码。当PLC无CRC校验码指令时,必须编制CRC校验码子程序进行CRC校验码计算,其算法是:

(1)设置CRC寄存器为HFF。

(2)把第一个参与校验的8位数与CRC低8位进行异或运算,结果仍存CRC。

(3)把CRC右移1位,最高位补0,检查最低位b0位。

(4)b0=0,CRC不变,b0=1,CRC与HA001进行异或运算,结果仍存CRC。

(5)重复(3)(4),直到右移8次,这样就对第一个8位数进行了处理,结果仍存CRC。

(6)重复(2)到(5),处理第二个8位数。

如此处理,直到所有参与校验的8位数全部处理完毕。结果CRC寄存器所存即为CRC校验码。

注意:CRC校验码是16位校验码,通信程序要求,必须把16位校验码的高8位和低8位分别送至两个存储单元再送回主程序。该子程序所用软元件清单如表2-7所示。

表2-7 CRC校验码子程序所用软元件

程序编制如图2-31所示(作为子程序P1编制)。

图2-31 CRC校验码子程序