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

2.3 子程序调用

2.3.1 子程序调用指令CALL,SRET

1.指令格式

FNC 01:CALL 【P】    子程序调用    程序步:3

FNC 02:SRET       子程序返回    程序步:1

CALL指令可用软元件如表2-5所示。

表2-5 CALL指令可用软元件

指令梯形图如图2-26、图2-27所示。

图2-26 CALL指令梯形图

图2-27 SRET指令梯形图

CALL指令操作数内容及取值如表2-6所示。

表2-6 CALL指令操作数内容及取值

注:由于P63为CJ(FNC 00)专用(END跳转),所以不可以作为CALL(FNC 01)指令的指针使用。

解读(CALL):当驱动条件成立时,调用程序入口地址标号为Pn的子程序,即转移到标号为Pn的子程序去执行。

解读(SRET):在子程序中,执行到子程序返回指令SRET时,立即返回到主程序调用指令的下一行继续往下执行。

2.指令应用

1)指令执行流程

调用子程序也是一种程序转移操作,和CJ指令不同是,CJ指令是在主程序区中进行转移,而调用子程序则是转移到副程序区进行操作,CJ指令转移后不产生断点,无须再回到CJ指令的下一行程序,而调用子程序在完成子程序的运行后,还必须回到调用子程序指令,并从下一行继续往下运行。而它们的相同之处是程序转移入口地址都用分支标号P来表示调用子程序的程序流程图,如图2-28所示。

图2-28 调用子程序程序流程图

调用子程序指令可以嵌套使用。三菱FX系列PLC在子程序内的调用子程序指令CALL最多允许使用四次,也就是说一个用户程序最多允许进行五层嵌套。图2-29表示了一个二次调用子程序的流程图。

图2-29 二次调用子程序流程图

2)指针P的使用

指针P的标号不能重复使用,也不能与CJ指令共用同一个标号,但一个标号可以供多个调用子程序指令调用。需要注意的是不可以使用指针P63。

子程序必须放在副程序区,在主程序结束指令FEND后面,子程序必须以子程序返回指令SRET结束。

3)脉冲执行型

调用子程序指令CALL有连续执行型和脉冲执行型两种方式。当为连续执行型CALL时,在每个扫描周期都会被执行。而当为脉冲执行型CALLP时,仅在驱动条件的上升沿出现时执行一次,用CALLP指令也可以执行程序初始化,且比CJ指令还要方便,如图2-30所示。

图2-30 CALLP指令应用

4)子程序调用

子程序可以在主程序中调用,也可以在中断服务程序中调用,还可以在其他子程序中调用,其调用执行过程都是相同的。

3.子程序内软元件使用

1)定时器T的使用

由于一般的定时器只能在线圈被驱动时计时,因此,如果用于仅在某种条件下才驱动线圈的子程序中,则不能进行计时。因此,FX系列PLC规定了在子程序里使用专用的子程序用定时器T192~T199,该定时器在线圈被驱动时或是执行END指令时进行计时,如果达到设定值,在线圈被驱动或执行END指令时相应触点动作。

在子程序内使用1ms定时器(T246~T249)时,到达设定值后,输出触点会在最初驱动线圈指令时(执行子程序时)动作,请务必注意。

2)软元件状态

子程序在调用时,其中各软元件的状态受程序执行的控制。但当调用结束后,其软元件会保持最后一次调用时的状态不变。如果这些软元件状态没有受到其他程序的控制,就会长期保持不变,哪怕是驱动条件发生了改变,软元件的状态也不会改变。

如果在程序中对定时器、计数器执行RST指令,定时器和计数器的复位状态也会保持。因此,对这些软元件编程时,可以在子程序结束后的主程序中复位,或是在子程序中进行复位。