程序流程控制指令(FNC00-FNC09)见表6-2。
表6-2 程序流程控制指令
1.条件跳转指令CJ
条件跳转指令CJ(P)的编号为FNC00,操作数为指针标号P0~P127,其中P63为END所在步序,不需标记。指针标号允许用变址寄存器修改。CJ和CJP都占3个程序步,指针标号占1个程序步。
条件跳转指令格式如图6-4所示。
操作软件:P0~P63,共64个。
图6-4 条件跳转指令格式
【例6-1】 条件跳转指令程序如图6-5所示,其执行中各元件过程如图6-6所示。
图6-5 条件跳转指令程序
图6-6 条件跳转指令执行中各元件过程
作为执行序列的一部分指令,有CJ、CJP指令,可以缩短运算周期及使用双线圈。在图6-5所示的示例中,如果X000=ON,则从1步跳转到标记P8的后一步。X000=OFF时,不进行跳转,从0步向4步移动,不执行跳转指令,Y001变成双线圈,但是X000=OFF时采用X001。X000=ON时采用X012动作。因条件跳转,所以即使是分段的程序,在跳转内或跳转外将同一线圈编成2个以上程序时,也当作一般的双线圈对待。
累计定时器及计数器的复位指令在跳转外时,计时线圈及跳转的计数线圈复位(触点恢复及当前值的清除)有效。
使用跳转指令时应注意:
1)CJP指令表示为脉冲执行方式。
2)在一个程序中一个标号只能出现一次,否则将出错。
3)在跳转执行期间,即使被跳过程序的驱动条件改变,但其线圈(或结果)仍保持跳转前的状态,因为跳转期间根本没有执行这段程序。
4)如果在跳转开始时定时器和计数器已在工作,则在跳转执行期间它们将停止工作,到跳转条件不满足后又继续工作。但对于正在工作的定时器T192~T199和高速计数器C235~C255,不管有无跳转仍连续工作。
5)若积算定时器和计数器的复位(RST)指令在跳转区外,即使它们的线圈被跳转,对它们的复位仍然有效。
6)如举例程序中X0=ON时跳转到程序P8称为有条件转移,若执行条件使用M8000,则为无条件跳转。
7)一个标号只能出现一次,多于一次则会出错;两条或多条跳转指令可以使用同一标号。
8)如图6-7所示,编程时标号占一行,对有意为向END步跳转的指针P63编程时,请不要对标记P63编程。给标记P63编程时,PLC会显示出错码6507(标记定义不正确)并停止。
【例6-2】 在工业控制当中经常采用手动和自动两种方式以确保生产控制的安全性和连续性,如图6-8所示。
图6-7 条件跳转指令(P63)
图6-8 条件跳转指令(例6-2)
2.子程序调用指令CALL、子程序返回指令SRET
子程序调用指令CALL的编号为FNC01,操作数为P0~P127,此指令占用3个程序步。子程序返回指令SRET的编号为FNC02,无操作数,占用1个程序步。
使用子程序调用与返回指令时应注意:
1)转移标号不能重复,也不可与跳转指令的标号重复;
2)子程序可以嵌套调用,最多可5级嵌套。
其程序格式如图6-9所示。
如果X000=ON,则执行调用指令跳转到标记P10步。在这里,执行子程序后,通过执行SRET指令返回原来的步,即CALL指令之后的步。
操作软元件为CALLP0~P62,SRET、FEND无操作软元件,如图6-10所示。
图6-9 子程序调用指令的使用
图6-10 子程序返回指令的使用
X001=OFF到ON后,只执行CALL P11指令1次后向标记P11跳转,即脉冲形式。在执行P11子程序的过程中,如果执行P12的调用指令,则执行P12的子程序,并用SRET指令向P11的子程序跳转。
【例6-3】 子程序调用指令实例如图6-11所示。(www.xing528.com)
第1个SRET返回主程序,第2个SRET返回第1个子程序。这样,在子程序内最多可以允许4次调用指令,整体而言可做5层嵌套。
3.与中断有关的指令
与中断有关的3条功能指令是:中断返回指令IRET,编号为FNC03;中断允许指令EI,编号为FNC04;中断禁止指令DI,编号为FNC05。它们均无操作数,占用1个程序步,PLC通常处于禁止中断状态,由EI和DI指令组成允许中断范围。在执行到该区间时,如有中断源产生中断,CPU将暂停主程序执行转而执行中断服务程序。当遇到IRET时返回断点继续执行主程序,如图6-12所示。
PLC呈平时禁止中断状态。如果用EI指令允许中断,则在扫描程序的过程中,如果X000或X001=ON,则执行中断例行程序①、②,回复初始主程序。
使用中断相关指令时应注意:
1)中断的优先级排队如下,如果多个中断依次发生,则以发生先后为序,即发生越早级别越高。如果多个中断源同时发出信号,则中断指针号越小优先级越高。
2)当M8050~M8058为ON时,禁止执行相应I0□□~I8□□的中断。M8059为ON时则禁止所有计数器中断。
3)无需中断禁止时,可只用EI指令,不必用DI指令。
图6-11 子程序调用指令
图6-12 与中断有关的功能指令
4)执行一个中断服务程序时,如果在中断服务程序中有EI和DI指,则可实现二级中断嵌套,否则禁止其他中断。
4.主程序结束指令
主程序结束指令FEND的编号为FNC06,无操作数,占用1个程序步。FEND指令表示主程序结束,当执行到FEND指令时,PLC进行I/O处理,监视定时器刷新,完成后返回起始步,如图6-13所示。
图6-13 主程序结束功能指令
使用FEND指令时应注意:
1)子程序和中断服务程序应放在FEND指令之后;
2)子程序和中断服务程序必须写在FEND和END指令之间,否则会出错。
5.监视定时器刷新指令
监视定时器刷新指令WDT是在PLC顺序执行程序中,进行监视定时器刷新的指令。WDT(P)指令为连续/脉冲执行型指令,无操作软元件,如图6-14所示。
图6-14 WDT指令
监视定时器指令WDT(P)编号为FNC07,没有操作数,占用1个程序步。WDT指令的功能是对PLC的监视定时器进行刷新。
FX系列PLC监视定时器的默认值为200ms(可用D8000来设定),正常情况下PLC扫描周期小于此定时时间。如果由于有外界干扰或程序本身的原因使扫描周期大于监视定时器的设定值,使PLC的CPU出错灯亮并停止工作,可通过在适当位置加WDT指令复位监视定时器,以使程序能继续执行到END指令。
使用WDT指令时应注意:
1)如果在后续的FOR-NEXT循环中,执行时间可能超过监控定时器的定时时间,可将WDT插入循环程序中。
2)当与条件跳转指令CJ对应的指针标号在CJ指令之前时(即程序往回跳),就有可能连续反复跳步使它们之间的程序反复执行,使执行时间超过监控时间。可在CJ指令与对应标号之间插入WDT指令。
6.循环指令
循环指令共有两条:循环区起点指令FOR,编号为FNC08,占3个程序步;循环结束指令NEXT,编号为FNC09,占用1个程序步,无操作数。
在程序运行时,位于FOR到NEXT之间的程序反复执行n次(由操作数决定)后再继续执行后续程序。只在FOR到NEXT指令之间的处理(利用源数据指定的次数)执行几次后,才处理NEXT指令以后的步。循环的次数n=1~32767。如果n在-32767~0之间,则当作n=1处理,如图6-15所示。
[C] 的程序执行4次后向NEXT指令③以后的程序转移。若在[C]的程序执行一次的过程中,数据寄存器D0Z的内容为6,则[B]的程序执行6次。因此,[B]的程序合计一共被执行了24次。若不想执行FOR到NEXT之间的程序,利用CJ指令,使之跳转(X010=ON)。当X010为OFF时,如K1X000的内容为7,则在[B]的程序执行一次的过程中,[A]被执行了7次。总计被执行了4×6×7=168次,这样一共可以嵌套5层。循环次数多时扫描周期会延长,有可能出现监视定时器错误,请务必注意。
使用循环指令时应注意:
1)FOR和NEXT指令必须成对使用;
2)FX2N系列PLC可循环嵌套5层;
3)在循环中可利用CJ指令在循环没结束时跳出循环体;
4)FOR指令应放在NEXT指令之前,NEXT指令应在FEND指令和END指令之前,否则均会出错。
NEXT指令在FOR指令之前或无NEXT指令,或在FEND、END指令以后有NEXT指令或FOR指令与NEXT指令的个数不一致时等,都会出错。
操作软元件:K、H、KnH、KnY、KnM、KnS、T、C、D、V、Z;NEXT指令无操作软元件。
图6-15 循环指令
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。