|
4.5 时序控制指令 |
时序控制指令主要包括结束(END)与空操作(NOP)指令、互锁(IL-ILC)指令、转移(JMP)指令以及循环指令等。
END(结束指令):用来结束程序的运行,该指令后面的指令不会被执行。
NOP(空操作指令):又称无功能指令,该指令不做任何逻辑操作,在程序中留下地址以便调试程序时插入指令或稍微延长扫描周期长度,而不影响用户程序的执行。
使用说明
①对于一个程序,执行END指令后,结束该程序的执行,因此,END指令后的其他指令不被执行。
②在一个程序的最后,必须输入END指令。无END指令时,将出现程序错误。
③END指令可以中断任务程序区域使用,但不能在块程序区域、顺控程序区域以及子程序区域中使用。
④NOP指令在梯形图中无表示,它可以在中断任务程序区域、块程序区域、顺控程序区域以及子程序区域中使用。
互锁指令包括互锁(IL)、互锁清除(ILC)、多重互锁(微分标志保持型多重互锁MILH、微分标志不保持型多重互锁MILR)和多重互锁清除(MILC)指令。
当IL指令的输入条件为OFF时,对从IL指令到ILC指令间的各指令的输出进行互锁。当IL指令的输入条件为ON时,照常执行从IL指令至ILC指令为止的各指令。IL-ILC的指令格式如表4-43所示。
表4-43 IL-ILC指令格式
使用说明
①即使已通过IL指令进行互锁,IL-ILC间的程序在内部仍执行,所以周期时间不会缩短。
②互锁IL和互锁清除ILC指令必须1对1配套使用,否则程序检测时会出现IL-ILC错误。
③互锁IL和互锁清除ILC指令不能嵌套使用,即IL-ILC指令间不能再存在IL-ILC指令。需进行互锁嵌套使用时,应使用MILH-MILC或MILR-MILC指令。
④IL-ILC指令间存在微分指令时,输入条件由于在互锁开始时和互锁解除时之间发生变化,因此,即使微分条件成立,也需在互锁解除时才能执行这些微分指令。
例4-24 使用IL-ILC指令实现信号灯HL的闪烁控制,要求按下SB0时,闪烁周期为1s,按下SB2时,闪烁周期为10s(即点亮5s,熄灭5s)。
解 设SB0、SB1、SB2分别与PLC输入端子0.00、0.01、0.02连接,信号灯HL与PLC输出端子100.00连接。可以使用两对IL-ILC指令实现信号灯HL的闪烁控制,其中一对IL-ILC指令作为闪烁周期1s控制;另一对IL-ILC指令作为闪烁周期10s控制。编写的程序如表4-44所示。
条0、条1为闪烁周期选择控制,其中条0为1s闪烁周期选择控制;条1为10s闪烁周期选择控制。条2~条4为1s闪烁周期控制,当条0中的0.00常开触点闭合一次时,W0.00线圈得电并自保,同时使条2中的W0.00常开触点为ON状态,执行IL-ILC指令间的程序,即条3中的程序。条3中的“P_1s”常开触点为“1.0秒时钟脉冲位”,它是内部时钟脉冲,该常开触点可以理解为两个定时器实现的1s闪烁控制。条5~条9为10s闪烁周期控制,当条1中的0.02常开触点闭合一次时,W0.01线圈得电并自保,同时使条5中的W0.01常开触点为ON状态,执行IL-ILC指令间的程序,即条6~条8中的程序。条6~条8为10s闪烁周期控制。条10为信号灯HL输出控制。
当SB0、SB2均未按下,或SB1按下时,W0.00和W0.01线圈均处于失电状态,则不会执行条2~条4以及条5~条9指令之间的程序,而直接执行条10中的程序。但由于W0.02和W0.03常开触点均处于断开,则条10中的100.00线圈也处于断电状态,因此信号灯不会闪烁。
表4-44 例4-24程序
互锁(IL-ILC)指令不能嵌套使用,但是多重互锁指令可以进行嵌套。多重互锁指令主要包括MILH微分标志保持型多重互锁指令、MILR微分标志不保持型多重互锁指令。
当MILH(或者MILR)指令的输入条件为OFF时,对从该MILH(或者MILR)指令到同一互锁编号N的MILC指令间的各指令的输出进行互锁。编号为N的MILH(或MILR)指令的输入条件为ON时,从该MILH(或者MILR)指令到同一互锁编号N的MILC指令为止的各指令照常执行。多重互锁和多重互锁清除(MILC)指令格式如表4-45所示。
表4-45 多重互锁和多重互锁清除(MILC)指令格式
使用说明
①MILH(或MILR)、MILC指令应配套使用,且可以嵌套使用,但是嵌套层数不能超过16层。
②MILH、MILR指令的区别:在MILH指令实行互锁期间,如果MILH、MILC指令间存在微分指令,并且有边沿输入,该边沿输入保存下来,在解除互锁后保存的边沿输入马上有效,即使此刻该输入已变为ON或OFF;MILR指令实行互锁期间,不会保存边沿输入。
③即使在MILH(或MILR)指令执行中,对于需要保持ON的区域,可在执行MILH(或MILR)指令之间,使用SET指令预先将其置于ON。
例4-25 使用MILH-MILC指令实现信号灯HL的闪烁控制,要求按下SB0时,闪烁周期为1s,按下SB2时,闪烁周期为10s(即点亮5s,熄灭5s),在未按下SB0、SB2或按下停止按钮SB1时,信号灯常亮。
解 在此可使用3对MILH-MILC指令,并且MILH-MILC指令嵌套实现闪烁控制。其中第1对作为信号灯的常亮控制,即此MILH-MILC指令的输入有效才能执行闪烁控制,否则使信号灯常亮;第2对MILH-MILC指令作为闪烁周期1s控制;第3对MILH-MILC指令作为闪烁周期10s控制。编写的程序如表4-46所示。
当SB1未按下(条0中的0.01常开触点处于断开状态)时,条0中的MILH指令的输入端为OFF,则不会执行条1~条11指令之间的程序,而直接执行条12中的程序。由于W0.02和W0.03常开触点均处于断开,W0.04常闭触点处于闭合状态,则条12中的100.00线圈也处于得电状态,因此信号灯常亮。当SB1按下时,条0中的MILH指令的输入端为ON,则执行条1~条11中的指令。
条1、条2为闪烁周期选择控制,其中条1为1s闪烁周期选择控制;条2为10s闪烁周期选择控制。条3~条4为1s闪烁周期控制,当条1中的0.00常开触点闭合一次时,W0.00线圈得电并自保,同时使条3中的W0.00常开触点为ON状态,执行MILH-MILC指令间编号N为1的程序,即条4中的程序。条4中的“P_1s”常开触点为“1.0秒时钟脉冲位”,该常开触点可以实现1s闪烁控制。条6~条10为10s闪烁周期控制,当条2中的0.02常开触点闭合一次时,W0.01线圈得电并自保,同时使条6中的W0.01常开触点为ON状态,执行MILH-MILC指令间编号N为2的程序,即条7~条9中的程序。条7~条9为10s闪烁周期控制。条10和条11为多重互锁清除指令。
表4-46 例4-25程序
转移指令包括转移(JMP)、转移结束(JME)、条件转移(CJP)、条件非转移(CJPN)、多重转移(JMP0)、多重转移结束(JME0)指令。
当JMP的输入条件为OFF时,则转移到执行编号为N的JME指令之后的程序,即不执行编号为N的JMP-JME间的指令;当JMP的输入条件为ON时,则转移到执行编号为N的JMP-JME指令之间的程序。转移(JMP)和转移结束(JME)指令的指令格式如表4-47所示。
表4-47 转移(JMP)和转移结束(JME)指令格式
使用说明
①转移时,所有指令的输出(如继电器、通道)保持在此前的状态,但是,TIM/TIMX指令、TIMH/TIMHX指令、TMHH/TMHHX指令所启动的定时器在不执行指令时也进行当前值的更新处理,因此计时继续。
②具有相同编号的JME指令有2个以上时,程序地址较小的JME指令有效。此时,地址较大的JME指令被忽略。
③向程序地址较小的一方转移时,JMP的输入条件为OFF期间,在JMP-JME间重复执行;JMP的输入条件为ON时,重复结束。
④JMP指令与JME指令配套使用。作为转移目的的JME指令需编写在有JMP指令的同一任务内。JMP指令和JME指令未配套使用时,会发生错误,ER标志变为ON。
⑤在执行JMP指令的情况下,JMP条件为OFF时,由于直接转换到JME指令,而不执行JMP-JME间的指令,所以在此之间没有指令执行时间。因此,可以使周期时间缩短。
例4-26 当0.00为ON时,JMP 00至JME 00之间的程序被执行。当0.00为OFF时,JMP 00至JME 00之间的程序被跳过而不执行,线圈100.00保持跳转前的状态,其程序如表4-48所示。
表4-48 例4-26程序
CJP(条件转移)指令的输入条件为ON时,则转移到具有N的转移编号的JME指令;输入条件为OFF时,则执行下一条指令以后的内容。CJPN(条件非转移)指令的输入条件为OFF时,则转移到具有N的转移编号的JME指令;输入条件为ON时,则执行下一条指令以后的内容。条件转移和条件非转移指令格式如表4-49所示。
使用说明
①CJP指令在输入条件为ON时转移,与JMP指令的动作相反。
②转移时,所有指令的输出(如继电器、通道)保持在此前的状态。但是,TIM/TIMX指令、TIMH/TIMHX指令、TMHH/TMHHX指令所启动的定时器在不执行指令时也进行当前值的更新处理,因此计时继续。
表4-49 条件转移(CJP)和条件非转移(CJPN)指令格式
③具有相同编号的JME指令有2个以上时,程序地址较小的JME指令有效。此时,地址较大的JME指令被忽略。
④向程序地址较小的一方转移时,CJP(CJPN)的输入条件为ON(OFF)期间,在JMP-JME间重复执行;CJP(CJPN)的输入条件为OFF(ON)时,重复结束。
⑤CJP(CJPN)指令与JME指令配套使用。作为转移目的的JME指令需编写在有CJP(CJPN)指令的同一任务内。CJP(CJPN)指令和JME指令未配套使用时,会发生错误,ER标志变为ON。
⑥在执行CJP(CJPN)指令的情况下,CJP(CJPN)条件为ON(OFF)时,由于直接转换到JME指令,而不执行CJP(CJPN)-JME间的指令,所以在此之间没有指令执行时间。因此,可以使周期时间缩短。
例4-27 当0.01为OFF时,CJP 00至JME 00之间的程序被执行。当0.01为ON时,CJP 00至JME 00之间的程序被跳过而不执行,线圈100.00保持跳转前的状态,其程序如表4-50所示。
表4-50 例4-27程序
当JMP0的输入条件为OFF时,对从JMP0指令至JME0指令间的指令进行NOP处理;输入条件为ON时,执行JMP0指令后面的内容。JMP0指令与JME0指令配套使用,与JMP/CJP/CJPN指令不同,由于不使用转移编号,可以在程序中的任何地点使用。多重转移和多重转移结束指令的格式如表4-51所示。
表4-51 多重转移和多重转移结束指令的格式
使用说明
①当输入条件为OFF时,需对从JMP0至JME0间的指令进行NOP处理,所以需要执行时间。因此,JMP0-JME0转移指令不会缩短周期时间。此外,由于不执行指令,输出将会保持。
②JMP0指令可以在同一程序中多次使用,但是,多次使用时,JMP0-JME0间不能重叠,并且不能嵌套使用。
③JMP0-JME0指令在块程序区域内不能使用。在JMP0-JME0指令间使用微分指令时,根据输入条件的不同,动作可能出现差异。
④转移指令的功能比较如表4-52所示。
表4-52 转移指令的功能比较
例4-28 当条0中的0.00为ON时,JMP0(条0)至JME0(条2)之间的程序被执行;当条0的0.00为OFF时,JMP0(条0)至JME0(条2)之间的程序用NOP取代。当条3中的0.01为ON时,JMP0(条3)至JME0(条5)之间的程序被执行。当条3的0.01为OFF时,JMP0(条3)至JME0(条5)之间的程序用NOP取代。程序如表4-53所示。
表4-53 例4-28程序
循环指令包括循环开始(FOR)、循环结束(NEXT)和循环中断(BREAK)指令。 FOR-NEXT为无条件重复执行指令,其重复执行次数由操作数N决定,重复执行N次后,再执行NEXT指令以后的指令。当BREAK指令的输入为ON时,强制停止当前的循环,对本指令与NEXT之间的指令进行NOP处理,然后执行NEXT之后的指令。循环指令的格式如表4-54所示。
表4-54 循环指令的格式
使用说明
①N指定为0时,对FOR-NEXT间的指令进行NOP处理。
②FOR-NEXT允许循环嵌套,但嵌套层次不能超过15层。
③BREAK指令只能在FOR-NEXT指令间使用。
④BREAK指令只能用于1个嵌套,若要使多重嵌套结束,应执行与嵌套层数相同数量的BREAK指令。
例4-29 表4-55的程序为双重循环嵌套的使用。其中条3至条6为内循环;条0至条8为外循环。对于内循环内言,其循环次数为5次,循环体为条4和条5。当条5中的0.05触点闭合,则不管内循环次数是否达到5次,将强制结束其内循环;否则条4中的程序重复执行5次。外循环的循环体是条1至条7,其外循环次数为3次。当条7中的0.02常开触点闭合时,强制结束外循环,否则条1至条6中的内容重复执行3次。
表4-55 例4-29程序