
2.2 条件转移
2.2.1 条件转移指令CJ
1.指令格式
FNC 00:CJ 【P】 程序步:3
CJ指令可用软元件如表2-2所示。
表2-2 CJ指令可用软元件

指令梯形图如图2-8所示。

图2-8 CJ指令梯形图
CJ指令操作数内容及取值如表2-3所示。
表2-3 CJ指令操作数内容及取值

解读:当驱动条件成立时,主程序转移到指针为Pn的程序段往下执行。当驱动条件断开时,主程序按顺序执行指令的下一行程序,并往下继续执行。
2.关于分支指针P
(1)指针又称标号、标签。在FX系列PLC里,指针有分支指针P和中断指针I两种。
(2)当程序发生转移时,必须要告诉PLC程序转移的入口地址,这个入口地址就是用指针来指示的。因此,指针的作用就是指示程序转移的入口地址。
分支指针P主要用来指示条件转移和子程序调用转移时的入口地址。条件转移时分支指针P在主程序区;子程序调用时分支指针P在副程序区。
(3)FX3系列PLC的分支指针P的点数如表2-4所示。
表2-4 FX3系列PLC的分支指针P的点数

(4)分支指针P必须和转移指令CJ或子程序调用指令CALL组合使用。
(5)指针P63为END指令跳转用特殊指针,当出现指令CJ P63,驱动条件成立后,马上转移到END指针,执行END指令功能。因此,P63不能作为程序入口地址标号进行编程。如果对标号P63编程,PLC会发生程序错误并停止运行,如图2-9所示。
(6)在编程软件GX上输入梯形图时,标号的输入方法为:找到转移后的程序首行,将光标移到该行左母线外侧,直接输入标号。

图2-9 指针P63的应用
3.转移指令CJ应用注意
1)连续执行与脉冲执行
CJ指令有两种执行形式:连续执行型CJ和脉冲执行型CJP。它们的执行形式是不同的,如图2-10所示。
对连续执行型指令CJ,在X010接通期间,每个扫描周期都要执行一次转移。对脉冲执行型指令CJP,X010每通断一次,才执行一次程序转移。

图2-10 CJ指令的连续执行与脉冲执行
2)转移方式
利用CJ转移时,可以向CJ指令的后面程序进行转移,也可以向CJ指令的前面程序进行转移,如图2-11所示。但在向前面程序进行转移时,如果驱动条件一直接通,则程序会在转移地址入口(标号处)到CJ指令之间不断运行。这就会造成死循环,且因程序扫描时间超过监视定时器时间(出厂值为200ms)而发生看门狗动作,程序停止运行。一般来说,如需要向前转移,建议使用CJP指令,仅执行一次。下一个扫描周期,即使驱动条件仍然接通,也不会再次执行转移。

图2-11 CJ指令的向前、向后转移
3)标号使用的唯一性
标号在程序中具有唯一性,即在程序中不允许出现标号相同的两个或两个以上程序转移入口地址,如图2-12所示。
4)标号重复使用
在程序中,标号是唯一的,但却可以是多个CJ指令的程序转移入口地址,如图2-13所示。当X010接通时,从上一个CJ转移到P10,当X010断开,X020接通时,从下一个CJ转向P10。但是CJ指令和子程序调用指令CALL不能共用一个标号,如图2-14所示。
5)无条件转移
CJ是条件转移指令,但如果驱动条件常通(如用特殊继电器M8000作为CJ指令的驱动条件),则变成无条件转移指令,如图2-15所示。

图2-12 CJ指令的标号使用唯一性

图2-13 CJ指令的标号重复使用

图2-14 CJ和CALL不能共用标号

图2-15 无条件转移
6)输出关断后转移
如图2-16所示程序,由于使用了上升沿检测指令PLS,所以,CJ指令要等1个扫描周期才能生效。采用这种方法,可以将CJ指令到转移标号之间的输出全部关断后才进行跳转。
7)标号的变址应用
标号也可变址寻址应用,这样,利用一条条件转移指令可以转移到多个标号的程序转移地址入口,如图2-17所示。

图2-16 输出关断后转移

图2-17 标号的变址应用