程序流向控制指令(FNC00~FNC09)如表4-2所示。
表4-2 程序流向控制指令
1.条件跳转指令CJ
CJ和CJ(P)指令用于跳过顺序程序的某一部分,以减少扫描时间。
示例及使用:条件跳转指令CJ(P)的编号为FNC00,操作数为指针标号P0~P127,其中P63为END所在步序,不需标记。指针标号允许用变址寄存器修改。CJ和CJ(P)都占3个程序步,指针标号占1步。如图4-11所示,当X20接通时,则由CJ P9指令跳到标号为P9的指令处开始执行,跳过了程序的一部分,减少了扫描周期。如果X20断开,跳转不会执行,则程序按原顺序执行。
使用跳转指令时应注意:
1)CJ(P)指令表示为脉冲执行方式。
2)在一个程序中一个标号只能出现一次,否则将出错。
3)在跳转执行期间,即使被跳过程序的驱动条件改变,但其线圈(或结果)仍保持跳转前的状态,因为跳转期间根本没有执行这段程序。
4)如果在跳转开始时定时器和计数器已在工作,则在跳转执行期间它们将停止工作,到跳转条件不满足后又继续工作。但对于正在工作的定时器T192~T199和高速计数器C235~C255不管有无跳转仍连续工作。
5)定时器和计数器的复位(RST)指令即使在跳转区外,它们的线圈如果被跳转,但对它们的复位仍然有效。
图4-11 跳转指令的使用
2.子程序调用与子程序返回指令
子程序调用指令CALL的编号为FNC01。操作数为P0~P127,此指令占用3个程序步。
子程序返回指令SRET的编号为FNC02。无操作数,占用1个程序步。
示例及使用:如图4-12所示,如果X0接通,则转到标号P10处去执行子程序。当执行SRET指令时,返回到CALL指令的下一步执行。
使用子程序调用与返回指令时应注意:
1)转移标号不能重复,也不可与跳转指令的标号重复。
2)子程序可以嵌套调用,最多可嵌套5级。
3.与中断有关的指令
中断是一种工作方式,PLC通常处于禁止中断状态,由EI和DI指令组成允许中断范围。即主程序的执行过程中,遇到中断请求时,暂停主程序执行,转而执行中断服务程序,中断服务程序执行完毕,再返回继续执行主程序。
与中断有关的三条功能指令是:中断返回指令IRET,编号为FNC03;允许中断指令EI,编号为FNC04;禁止中断指令DI,编号为FNC05。它们均无操作数,占用1个程序步。
示例及使用:如图4-13所示,允许中断范围中若中断源X0有一个下降沿,则转入I000为标号的中断服务程序,但X0可否引起中断还受M8050控制,当X20有效时则M8050控制X0无法中断。
使用中断相关指令时应注意:
1)中断的优先级排队如下,如果多个中断依次发生,则以发生先后为序,即发生越早级别越高,如果多个中断源都发出信号,则中断指针编号越小优先级越高。
2)当M8050~M8058为ON时,禁止执行相应I0□□~I8□□的中断,M8059为ON时则禁止所有计数器中断。
3)无须中断禁止时,可只用EI指令,不必用DI指令。
4)执行一个中断服务程序时,如果在中断服务程序中有EI和DI,可实现二级中断嵌套,否则禁止其他中断。
(www.xing528.com)
图4-12 子程序调用与返回指令的使用
图4-13 中断指令的使用
4.主程序结束指令
主程序结束指令FEND的编号为FNC06,无操作数,占用1个程序步。FEND表示主程序结束,当执行到FEND时,PLC进行输入/输出处理,监视定时器刷新,完成后返回启始步。
使用FEND指令时应注意:
1)子程序和中断服务程序应放在FEND之后。
2)子程序和中断服务程序必须写在FEND和END之间,否则出错。
5.监视定时器指令
监视定时器指令WDT(P)的编号为FNC07,没有操作数,占有1个程序步。WDT指令的功能是对PLC的监视定时器进行刷新。
示例及使用:FX系列PLC的监视定时器默认值为200ms(可用D8000来设定),正常情况下PLC扫描周期小于此定时时间。如果由于有外界干扰或程序本身的原因使扫描周期大于监视定时器的设定值,使PLC的CPU出错灯亮并停止工作,可通过在适当位置加WDT指令复位监视定时器,以使程序能继续执行到END。
如图4-14所示,利用一个WDT指令将一个240ms的程序一分为二,使它们都小于200ms,则不再会出现报警停机。
使用WDT指令时应注意:
1)如果在后续的FOR-NEXT循环中,执行时间可能超过监控定时器的定时时间,可将WDT插入循环程序中。
图4-14 监控定时器指令的使用
2)当与条件跳转指令CJ对应的指针标号在CJ指令之前时(即程序往回跳)就有可能连续反复跳步使它们之间的程序反复执行,使执行时间超过监控时间,可在CJ指令与对应标号之间插入WDT指令。
6.循环指令
功能是FOR与NEXT间的程序被反复执行,执行次数由FOR指令的源操作数设定,执行完成后,执行NEXT后面指令。
循环指令共有两条:循环起点指令FOR,编号为FNC08,占3个程序步;循环结束指令NEXT,编号为FNC09,占用1个程序步,无操作数。
在程序运行时,位于FOR-NEXT间的程序反复执行n次(由操作数决定)后再继续执行后续程序。循环的次数n=1~32767。如果n在-32767~0之间,则当作n=1处理。
图4-15 循环指令的使用
示例及使用:图4-15所示为一个二重嵌套循环,外层执行5次。如果D0Z0中的数为6,则外层A每执行一次则内层B将执行6次。
使用循环指令时应注意:
1)FOR和NEXT必须成对使用。
2)FX2N系列PLC可循环嵌套5层。
3)在循环中可利用CJ指令在循环没结束时跳出循环体。
4)FOR应放在NEXT之前,NEXT应在FEND和END之前,否则均会出错。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。