程序流程控制指令见表2-8,具体包括CJ、CALL、SRET、FEND、WDT、FOR、NEXT。
表2-8 程序流程控制指令
图2-35 CJ指令的格式
1.条件跳转指令CJ
CJ指令的格式如图2-35所示,其中标记共有P0~P63即64个。
CJ指令程序举例如图2-36所示。
作为执行序列的一部分指令,有CJ、CJP指令,可以缩短运算周期及使用双线圈。在图2-36的示例中,如果X0“ON”,则从1步跳转到标记P8的后一步。X000=OFF时,不进行跳转,从0步向4步移动,不执行跳转指令。Y001变成双线圈,但是X000=OFF时采用X001。X000=ON时采用X012动作。因条件跳转,即使是分段的程序,在跳转内或跳转外将同一线圈编成两个以上程序时,也当做一般的双线圈对待。累计定时器及计数器的复位指令在跳转外时,计时线圈及跳转的计数线圈复位(接点恢复及当前值的清除)有效。CJ指令举例中的接点变化和接点动作情况见表2-9。
图2-36 CJ指令程序举例
表2-9 CJ指令举例中的接点变化和接点动作情况 跳转过程中发生变化会产生这样的结果!
(续)
CJ指令说明如下:
1)如举例程序中X0=ON时跳转到程序P8称为有条件转移,而如下程序则为无条件跳转(见图2-37)。
2)一个标号只能出现一次,多于一次则会出错;两条或多条跳转指令可以使用同一标号。
3)如图2-37所示,编程时标号占一行,对有意为向END步跳转的指针P63编程时,请不要对标记P63编程,给标记P63编程时,PLC显示出错码6507(标记定义不正确)并停止。
【实例12】 在工业控制当中经常采用手动和自动两种方式以确保生产控制的安全性和连续性。
图2-37 无条件跳转举例
图2-38所示为程序梯形图,其中X0=OFF时为手动,X0=ON时为自动。
2.子程序调用指令CALL、子程序返回指令SRET、主程序结束指令FEND
子程序相关指令的格式如图2-39所示,其中CALL具有操作软元件,而SRET、FEND无操作软元件。
(www.xing528.com)
图2-38 程序梯形图
图2-39 子程序相关指令的格式
从图2-39中可以看出,当X000=ON,则执行调用指令跳转到标记P10步。在这里,执行子程序后,通过执行SRET指令返回原来的步即CALL指令之后的步。
图2-40所示为CALLP指令程序格式。当X001=OFF到ON后,只执行CALLP P11指令1次后向标记P11跳转,即脉冲形式。在执行P11的子程序的过程中,如果执行P12的调用指令,则执行P12的子程序,用SRET指令向P11的子程序跳转。
第一个SRET返回主程序,第二个SRET返回第一个子程序。这样,在子程序内最多可以允许有4次调用指令,整体而言可做5层嵌套。
应用子程序调用指令,可以优化程序结构,提高编写程序的效果。
图2-40 CALLP指令程序格式
【实例13】 当X1为OFF、X0为ON时,调用P0子程序;若X0为OFF时,调用P1子程序;当X1为ON时,不能调用P0、P1子程序,而调用P2子程序。
图2-41所示为子程序调用实例。
图2-41 子程序调用实例
3.监视定时器刷新指令WDT
WDT指令是在PLC顺序执行程序中,进行监视定时器刷新的指令。WDT(P)为连续/脉冲执行型指令,无操作软元件。图2-42所示为WDT指令执行示意。
4.循环指令FOR、NEXT指令说明
循环指令是指只在FOR到NEXT指令之间的处理(利用源数据指定的次数)执行几次后,才处理NEXT指令以后的步。n=1~32767时有效,在指定了-32767~0时,被当做n=1处理。如图2-43所示的程序中,[C]的程序执行4次后向NEXT指令③以后的程序转移。
若在[C]的程序执行一次的过程中,数据寄存器D0Z的内容为6,则[B]的程序执行6次。因此[B]的程序合计一共被执行了24次。若不想执行FOR~NEXT间的程序,利用CJ指令使之跳转。(X10=ON)当X10为OFF时,例如,K1X000的内容为7,则在[B]的程序执行一次的过程中,[A]被执行了7次。总计被执行了4×6×7=168次,这样一共可以嵌套5层。循环次数多时扫描周期会延长,有可能出现监视定时器错误,请务必注意。
NEXT指令在FOR指令之前或FOR指令与NEXT或无NEXT指令,或在FEND、END指令以后有NEXT指令的个数不一致时等,都会出错。
图2-42 WDT指令执行示意
图2-43 FOR、NEXT指令程序
循环指令FOR的操作软元件包括K、H、KnH、KnY、KnM、KnS、T、C、D、V、Z;而NEXT则无操作软元件。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。