程序流控制指令(FNC00~FNC09)共10条,这一类指令提供了程序的条件执行、优先处理等与顺序控制程序控制流程相关的指令。这里主要讲述条件跳转指令和子程序调用指令。
1.条件跳转
条件跳转指令CJ(FNC00)和主程序结束指令FEND(FNC06)的使用说明如下:
(1)指令概述
条件跳转指令(CJ)用于跳过顺序程序中的某一部分,这样可以减少扫描时间,并使“双线圈操作”成为可能。跳转时,被跳过的那部分指令不执行。指令的执行形式有连续执行和脉冲执行两种。
FEND为主程序结束指令。执行到FEND指令时机器进行输出处理、输入处理、警戒时钟刷新,完成后返回到第0步。
CJ和FEND指令使用时的编程结构及动作执行情况如图3-37所示。
图3-37 CJ指令动作执行情况
(2)指令使用要点
1)CJ和FEND指令成对使用。标号Pn的子程序应放在主程序结束指令FEND的后面。
2)图3-37中P20指的是跳转的指针编号,编号范围为P1~P4095,但是P63为END步指针,不能使用。对标记P63进行编程时,PLC会显示出错代码6057并停止运行,如图3-38所示。
3)标记输入位置。编写梯形图程序时,将光标移动到梯形图的母线左侧,在回路块起始处输入标记P20即可,如图3-39所示。
图3-38 P63编程
图3-39 标号的输入
4)标记P的重复使用。多个跳转程序可以向同一个标号Pn的子程序跳转,但不可以有两个相同标号Pn的子程序跳转,如图3-40所示。
CJ指令也不能和CALL指令(子程序调用)共用相同的标号,如图3-41所示。
图3-40 标记P的重复使用
图3-41 CJ和CALL共用标号
5)无条件跳转的问题。如图3-42所示,M8000为运行监控,程序无条件执行到标号为P5所指向的程序。
6)有多个子程序时,则需多次使用FEND指令,在最后的END和FEND指令之间编写子程序和中断子程序,如图3-43所示。
图3-42 无条件跳转(www.xing528.com)
图3-43 多次使用FEND
7)跳转程序中触点线圈动作情况。在跳转程序中涉及PLC的软元件的动作情况,不同的软元件会因跳转指令的执行而产生不同的结果。如图3-44所示,跳转前后触点、线圈状态见表3-12。
图3-44 跳转程序中触点线圈动作情况
表3-12 图3-44跳转前后触点、线圈状态表
2.子程序
调用子程序指令CALL(FNCO1)和子程序返回指令SRET(FNCO2)的使用说明如下:
(1)指令概述
CALL指令是在顺控程序中,对想要共同处理的子程序进行调用的指令。使用该指令可以减少程序的步数,更加方便有效地设计程序。
当输入指令为ON时,执行CALL指令,向标号为Pn的子程序跳转(调用标号为Pn的子程序),使用SRET指令则返回到主程序。
编写子程序时,必须使用子程序返回指令(SRET),二者配套使用。
子程序应写在FEND之后,即CALL、CALL(P)指令对应的标号应写在FEND指令之后。CALL、CALL(P)指令调用的子程序必须以SRET指令作为结束。程序结构如图3-45所示。
(2)指令使用要点
1)指针标号Pn可以使用的范围为P0~P4095,其中P63为END步指针,不能使用。
2)调用子程序可以使用多重CALL指令进行嵌套,其嵌套子程序可达5级(CALL指令可用4次)。程序结构如图3-46所示。
图3-45 调用子程序结构
图3-46 嵌套子程序结构
3)在调用子程序和中断子程序中,可采用T192~T199或T246~T249作为定时器。
4)CALL指令调用子程序时,对应的两个或两个以上子程序之间用SRET隔开。
5)若FEND指令在CALL或CALL(P)指令执行之后、SRET指令执行之前出现,则程序被认为是错误的。另一个类似的错误是使FEND指令处于FORNEXT循环中。
6)若有多个FEND指令,则子程序必须在最后一个FEND指令与END指令之间,即程序最后必须有一个END指令。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。