6.1.2 子程序
1. 子程序及其调用
什么是子程序,子程序是相对于主程序而言的独立的程序段,子程序完成的是各自独立的程序功能。它和中断服务程序一样,存放在副程序区,因此,PLC扫描时,是有条件地执行子程序的。仅当条件成立时,PLC才由主程序区转移到副程序区去执行相应的子程序段,这个过程一般称做子程序调用(或叫呼叫子程序)。
那么在什么情况下,会用到子程序呢?有两种情况。使编写子程序成为必要。一是,在一些用户程序中,有一些程序功能会在程序中反复执行,如某些标定变换程序,报警程序,通信程序中的校验码程序等等,这是,可将这些程序段编写成子程序,需要时,对其进行调用。而不需要在主程序中反复重写这些程序段。这样,可使主程序简单清晰,程序容量减少,扫描时间也相应缩短。另一种情况是当系统规模很大、控制要求复杂时,如果将全部控制任务放在主程序中,主程序将会非常复杂,既难以调试,也难以阅读。使用子程序可以将程序分成容易管理的小块,使程序结构简单,易于阅读、调试、查错和维护。三菱FX PLC的功能指令实际上就是一个字程序,当我
们在梯形图中应用功能指令时,实质上就是调用相应的子程序完成功能指令的操作功能。、
在讲解程序流程时,曾经讲到当程序执行由主程序转移到子程序时,会在主程序区保有断点,这断点保存是由PLC自动完成的。而子程序调用指令必须指出程序转移地址。当PLC执行相应的子程序段后还必须返回到主程序区,因此在子程序里必须有返回指令。这样,子程序的结构应应如图6-1-5所示。 图6-1-5 子程序结构
子程序入口标志因PLC不同而不同,但子程序调用指令和子程序返回指令在子程序调用时应成对出现,这对所有品牌PLC都一样。
一般来说,子程序调用都有驱动条件的,仅当驱动条件成立时才调用子程序。如果想无条件调用子程序,可以用特殊继电器来驱动子程序调用指令,例如用三菱FX的M8000的常开触点作为驱动条件即可。
子程序可以在主程序中调用,也可以在中断服务程序中调用,还可以在其他子程序中调用。其调用执行过程都是相同的。
2. 子程序嵌套
子程序嵌套是指在子程序中又应用子程序调用指令去调用其他子程序。这时,其调用过程和主程序调用子程序一样。图6-1-6为三次调用子程序的程序扫描执行过程。
图6-1-6 子程序嵌套
PLC对子程序嵌套应用的层次是有限制的,也就是在子程序内对子程调用指令的使用次数是有限制的,三菱FX PLC最多只能使用4次子程序调用指令,对主程序来说最多有5成嵌套,西门子S-200 PLC最多为8层。
3. 子程序编写
子程序是按照所完成的独立功能来编写的,但它完成后必须把相关控制数据通过软元件传送给主程序,而子程序本身也在使用软元件。由于三菱FX PLC的软元件是所有程序共享的,这就存在着一个软元件冲突问题,(主要体现在数据寄存器D的地址冲突),当主程序和子程序都用某一地址的D寄存器时,如果它的含义在主程序和子程序中不同时,就会出现混乱。因此当程序复杂,子程序较多时,必须对所用软元件作统一分配以避免混乱发生。同时,同样功能的子程序在不同控制系统中移植时,必须要检查子程序与新的主程序有无地址冲突,如果有,则必须对子程序软元件进行修改或对主程序软元件进行修改。
子程序在调用时,其中各软元件的状态受程序执行的控制。但当调用结束,其软元件则保持最后一次调用时的状态不变。如果这些软元件状态没有受到其他程序的控制,就会长期保持不变,哪怕是驱动条件发生了改变,软元件的状态也不会改变。
关于子程序编写的进一步说明将在子程序调用指令中讲解。