首页 理论教育 流程控制指令详解

流程控制指令详解

时间:2023-06-23 理论教育 版权反馈
【摘要】:PLC程序流程是可以控制的,其使用的指令主要有跳转、循环、子程序、中断、步进等。图2-38具体说明了跳转指令的功能。这两条指令的梯形图格式为图2-42 互锁和互锁 清除指令例外使用2.循环指令它由FOR和NEXT两条指令组成。子程序入口及结束指令无须逻辑条件,而调子程序的指令要有逻辑条件。直至RET指令,则又返回主程序,执行SBS之后的下一个指令。

流程控制指令详解

PLC程序流程是可以控制的,其使用的指令主要有跳转、循环、子程序、中断、步进等。

1.跳转指令

OMRON机用的为JMP(004)及JME(005)。这两条要配对使用。

JMP指令执行前,要建立逻辑条件。JME不要条件,只是表示跳转结束。要跳转的程序列于这两个指令之间。

当执行JMP时,若其逻辑条件为ON,则不跳转(注意:它与汇编语言的跳转含义相反,与有的PLC厂家的类似指令及后面介绍的CJP指令也相反),照样执行JMP与JME间的指令,如同JMP、JME不存在一样;若为OFF,则JMP与JME间的程序不执行,有关输出保持不变。

图2-38具体说明了跳转指令的功能。

JMP、JME可嵌套使用,但其层次有时受限制。

JMP、JME编号使用时,配对的两个,编号要一致,而且不能重复。

有的可编程的跳转类似计算机的汇编语言,指定跳转到哪个标号的语句去执行,情况复杂一些,使用时要小心,要避免出现死循环。

978-7-111-26319-7-Chapter02-88.jpg

图2-38 跳转指令使用示意图

CJ1机还有其它几种跳转指令,CJP、CJPN、JME等。其作用与JMP大同小异,具体如图2-39、图2-40所示。

978-7-111-26319-7-Chapter02-89.jpg

图2-39 CJP跳转指令使用示意图

978-7-111-26319-7-Chapter02-90.jpg

图2-40 CJPN跳转指令使用示意图

在此,附带对互锁IL(002)和互锁清除ILC(003)指令也作简要介绍。这两个指令在形式上,与跳转指令类似,也是要配对使用。但功能不同,它不改变程序流程,只是像电路的“总开关”一样,影响IL与ILC间的程序执行,如图2-41所示。

图2-41中“正常执行”意指,“总开关”合上,不影响IL与ILC间的程序执行。“输出互锁”意指,“总开关”断开,IL与ILC间的程序执行条件全为OFF,即其间的输出全被互锁住。

一般讲,IL(002)和ILC(003)要配对使用,但有时也有例外。如图2-42所示,这里有多于一个IL(002)和单个ILC(003)配对。当执行程序检查时,会显示有错,但程序仍能正确执行。

978-7-111-26319-7-Chapter02-91.jpg

图2-41 互锁和互锁清除指令示意图

978-7-111-26319-7-Chapter02-92.jpg

图2-42 互锁和互锁 清除指令例外使用

2.循环指令

它由FOR(512)和NEXT(513)两条指令组成。两条指令要配对使用。其功能是,使这两条指令间的指令,按指定的次数,重复执行。

这两条指令的梯形图格式为

978-7-111-26319-7-Chapter02-93.jpg

这里,N为指定的重复次数。

不过已进入循环后,也还可用BREAK(514)指令,使其退出循环。图2-43示出,如a OFF,BREAK(514)指令不执行,则FOR与NEXT间的指令执行3次(这里,N=3)。但,如在执行中aON,则BREAK(514)指令执行,程序将退出循环执行。

FOR-NEXT循环可嵌套,可多至15层,在图2-44所示的例子中,程序段A、B和C如下执行:A→B→B→C,A→B→B→C和A→B→B。

978-7-111-26319-7-Chapter02-94.jpg

图2-43 用BREAK指令退出循环

978-7-111-26319-7-Chapter02-95.jpg

图2-44 FOR-NEXT嵌套使用

多层循环时,也可用BREAK(514)从一个个FOR-NEXT循环中退出。若要从嵌套循环中退出,则需要多个(嵌套层数)BREAK(514)指令。图2-45所示为在多层循环中,使用BREAK指令退出循环的情况。

3.子程序

在程序中,常有一些要重复使用的一组组指令,用以实现某些特定的功能。若把这一组组指令编成子程序,则可大大简化编程。

子程序的指令有3条:

SBN(92)N———子程序的入口;

RET(93)———子程序结束;

SBS(91)N———子程序调用。

N为子程序编号,编号数与可编的子程序对应。

子程序入口及结束指令无须逻辑条件,而调子程序的指令要有逻辑条件。当逻辑条件ON时,执行SBS指令,则停止SBS之后的指令执行,转而去执行从子程序入口开始的程序。直至RET指令,则又返回主程序,执行SBS之后的下一个指令。若条件为OFF,子程序不调用,如同SBS指令不存在一样,程序执行SBS之后的次一个指令。

使用子程序的情况如图2-46所示。

978-7-111-26319-7-Chapter02-96.jpg

图2-45 FOR-NEXT多层循环

978-7-111-26319-7-Chapter02-97.jpg

图2-46 子程序使用示意图

SBS指令可多次使用,亦即子程序可多次被调用。子程序被调用的次数越多,其使用的效率也越高,越说明子程序存在的必要。

子程序可以嵌套使用,即子程序还可调子程序。但其层数是受限制的,而且也不能调用自身,即不能递归

图2-47所示为子程序嵌套使用的情况。这里,000000 ON时,调子程序1,子程序1执行时,如000001 ON则又调子程序2。

除了子程序指令,OMRON还有宏(MCRO(099))指令。实质上它也是子程序。不同的在于MCRO(099)可以使用S和D中的参数改变子程序中位和字地址,而不改变子程序的结构。也就是说,它是带参数的调子程序。

提示:所有的子程序都要安排在主程序的后面,在END指令之前。

CJ1机为多任务编程。这里讲的子程序只是局部的。只能在本任务中调用。要想所有任务中调用,要用全局子程序。

全局子程序指GSBN(751)和GRET(752)之间的程序段。其调用要用全局子程序调用指令GSBS(750)。

图2-48所示为全局子程序及其调用情况。这里循环或中断任务1与循环或中断任务2,只要条件具备,均可调用全局子程序n。

4.中断

中断也是调子程序,但它不是靠SBS指令调,而是靠中断事件调。且调的子程序编号与所发生的事情对应。这些子程序有时还称为中断服务程序。

978-7-111-26319-7-Chapter02-98.jpg

图2-47 子程序嵌套使用

提示:CJ1机是多任务编程的,它不调子程序,而是调中断任务,这点要注意。凡为多任务组织程序的PLC,多也是如此。

PLC中断事件可以来自外部,也可来自内部。前者称外中断,后者称内中断。

外部中断用输入点,如CQM1机,可指定00000~00003四个点为中断输入点;可编写四个中断服务程序与这4点从OFF到ON的事件对应。只要这四点之一从OFF转为ON(产生中断事件),则调用一次对应的服务程序。

978-7-111-26319-7-Chapter02-99.jpg

图2-48 全局子程序调用

这种外中断,可缩短PLC对输入信号的响应时间。

内部中断的事件来自PLC内部,如定时中断。C200H机,可通过FUN(89)指令,设定时中断的周期。只要执行FUN(89)一次,则PLC将定时地执行定时服务程序(子程序编号指定为99)。CQM1可通过ST1M指令设这个中断周期。其它PLC也有类似指令。

PLC处理中断事件是有个过程的。当发生中断事件时,PLC总是先记录发生的事件,并对其按优先级进行排队。优先级高的先执行,它执行完了,再执行优先级低的。所有中断任务处理完了,再转回执行正常的循环程序。而优先级与中断的任务号是对应的。号越小,优先级越高。

要注意的是,已记录但未执行的中断,其后又发生相同的事件,PLC对此将不理睬。所以,不是发生的所有中断事件都会处理的。

为了处理好中断,提高程序的控制可靠性与效率,PLC还提供一些有关的中断处理指令。

在主程序中,某一部分不允许被中断,这时可用中断禁止指令;某一部分允许被中断,这时可用中断允许指令。在不使用这两个指令时,默认为中断允许(S7-200默认为中断不允许)。

CJ1机中断允许禁止的梯形图符号如下:

978-7-111-26319-7-Chapter02-100.jpg(www.xing528.com)

当程序运行在中断禁止区时,即使出现中断事件,正运行的程序也不中断。待进入允许区后才转去处理中断。中断允许的梯形图符号如下:

978-7-111-26319-7-Chapter02-101.jpg

使用这两个指令时中断允许、禁止的情况如图2-49所示。

中断可开通,也可被屏蔽。中断开通后,中断事件出现,才可去执行中断任务或子程序。中断被屏蔽时,中断事件即使出现,其相应的服务也执行。

屏蔽,开通有的靠指令,有的靠设定,使用时,要按说明书要求进行。CJ1机用MSKS指令。其梯形图格式如下:

978-7-111-26319-7-Chapter02-102.jpg

这里,N为中断单元号;

S为功能字。

当N为0或1时,S的对应位的内容,决定中断单元0或1的对应点,是中断屏蔽(值1时),还是中断开通(值0时)。

如图2-50所示,当000000ON时,执行一次本指令,则中断单元0的第3、4、6、7、14、15的输入点中断开通恢复,其它的中断屏蔽。

978-7-111-26319-7-Chapter02-103.jpg

图2-49 中断允许、禁止示意图

978-7-111-26319-7-Chapter02-104.jpg

图2-50 MSKS指令使用例子1

此外,还要可用MSKS指令,确定中断事件产生的时刻。这时N设为2(对中断模块0)或3(对中断模块1)。S的对应位的内容,决定中断单元0或1的对应点,中断事件产生的时刻,是输入点OFF到ON时(值0时),还是ON到OFF(值0时)发生事件。

如图2-51所示,当000001ON时执行一次本指令,则中断单元0的第1、8、10点为从ON到OFF时,发生输入中断事件,而其它点为从OFF到ON时,发生输入中断事件。

978-7-111-26319-7-Chapter02-105.jpg

图2-51 MSKS指令使用例子2

还可用本指令,开通定时使中断。这时N设为4(用于定时中断0)或5(用于定时中断1)。S的值,再乘设定单位(可为10ms、1ms,由编程软件设定)则为定时中断的间隔时间。如图2-52为100ms。

978-7-111-26319-7-Chapter02-106.jpg

图2-52 MSKS指令使用例子3

以上例子,说明执行MSKS指令是重要的。只有执行了MSKS指令后,才使中断生效。

此外,还有读中断屏蔽,MSKR指令。其梯形图格式如下:

978-7-111-26319-7-Chapter02-107.jpg

这里,N为中断单元号;

S为存储字。

执行本指令,将读出N指定的中断模块各屏蔽位的情况,并存于S中。当N为0或1时,S的对应位的内容,决定中断单元0或1的对应点,是中断屏蔽(值1时),还是中断开通(值0时)。

如图2-53所示,当000000 ON时,执行一次本指令,则中断单元0的第3、4、6、7、14、15的输入点中断开通恢复,其它的中断屏蔽。

978-7-111-26319-7-Chapter02-108.jpg

图2-53 MSKR指令使用例子

MSKR指令中N的其它取值及其含义同指令MSKS。与MSKS不同的只是,MSKS是写(设定),而MSKR是读。

最后,还有CLI指令,用以取消已记录,但未执行的外中断任务。但不能清除一个正在执行的中断任务。它的梯形图格式如下:

978-7-111-26319-7-Chapter02-109.jpg

这里,N为中断单元号;

S为设定字。

这时,N取值及其含义与MSKS相同。S值中某位为1时,相应的中断输入被清除。为0,则其记录保留。

对定时中断,S的值乘设定单位(可为10ms、1ms,由编程软件设定)则为执行MSKS指令后第一个开始定时中断的时间间隔。如图2-54所示的说明。

如图2-55所示,当000000 ON时,本指令执行,可使执行MSKS后,要延长50s(这里1388为十六进制数,折合十进制数为5000,设定定时单位为10ms),才再进入由MSKS设定的定时时间间隔定时中断。

978-7-111-26319-7-Chapter02-110.jpg

图2-54 定时中断的时间间隔

978-7-111-26319-7-Chapter02-111.jpg

图2-55 CLI指令使用例子

如果在一个I/O中断任务正在执行时,接收到一个不同的中断输入,输入的中断号在内部被记录,直至当前任务和其它较高优先级别的任务执行完毕。而执行CLI(691)可用于被记录的中断在其执行前将它们清除。

如执行图2-55中的CLI(691)指令,它用的操作数为D00101,其内容为F2(十六进制),将中断输入单元0中除了输入0、2和3之外的所有记录的中断输入清除。如图2-56所示。

978-7-111-26319-7-Chapter02-112.jpg

图2-56 记录中断输入清除

在中断任务3执行完毕后,按优先级顺序执行已记录的中断。因为中断输入0记录了一个输入。则将在任务3执行完毕后执行I/O中断任务0(中断任务100)。因为CLI(691)未保留中断输入1,所以这一中断输入记录被清除,如图2-57所示。

在中断任务3执行完毕后,按优先级顺序执行已记录的中断。因为中断输入0记录了一个输入。所以将在任务3执行完毕后执行I/O中断任务0(中断任务100)。因为CLI(691)未保留中断输入1,所以这一中断输入记录被清除。

如中断输入0~3全变为ON,且未执行CLI(691),所有输入将被记录,并在中断任务3执行完毕后顺序执行之(中断任务按优先权从最低中断号到最高中断号顺序执行),如图2-58所示。

978-7-111-26319-7-Chapter02-113.jpg

图2-57 记录的中断输入清除示意图

978-7-111-26319-7-Chapter02-114.jpg

图2-58 执行中断顺序

5.步进指令

工作设备工作,或一些工艺过程往往分成步,按步进行。一个步完成了,再转入另一个步。可以有很多步。步,可以按顺序工作,也可依条件产生分支,改变顺序。需要时,还可多步并行工作……

为此,PLC多设有步进指令。OMRON机步进指令有两条:

STEP(008)B,步进程序入口指令。B为标号,若没有标号B,表示步指令结束。它只是表明步进程序,也称工序的入口,执行它无须逻辑条件。

SNXT(009)B,步进程序调用(激活)指令,调用标号为B的步进程序。执行它需逻辑条件。条件为真(ON),则执行调用,假(OFF)不调用。

有的PLC,如日本三菱,B为专用的继电器S(状态继电器),OMRON公司除输入继电器外,可用任何一种继电器。

978-7-111-26319-7-Chapter02-115.jpg

图2-59 步进指令及 其使用例子

步进指令的要点是:

1)只有已激活的步的程序才被扫描,才被执行

2)在已激活步中,如激活了后续步,则自然处于非激活状态;

3)在程序中,可任意把某个步激活;

4)当某步激活后,原来激活它的条件变化,不再对其产生影响。因此,最好用脉冲信号建立逻辑条件。

步进程序可以顺序地被调用,直至最后一步。也可以分支调用,依条件按不同的分支进行。也可以平行调用,条件具备时,可同时调两个步程序,然后再依各步的情况再一步步推进,直到退出步进程序,返回主程序。

图2-59所示为步进指令的使用例子。

从图知,它用W0.00等(内部工作区)作为步标识。当0.00 ON,步W0.00被激活,A段程序(在虚线处,程序未画出,下同)被扫描、被执行。这时,如0.01 ON,则W0.01步激活,并退出W0.00步。同时,B段程序被扫描、被执行。这时,如0.2ON,则W100.00步激活,并退出W0.01步。但,如程序中无此步,则意味着退出步进程序。

提示:OMRONPLC所有步进指令应放在其它主程序之后,子程序之前。如果主程序放在它之后,那这部分主程序将不执行;如把它放在子程序之后,那它也将不执行。

提示:OMRON调新步时,旧的步先OFF,然后,新的步才ON。即新的与旧的步从不同时工作。而三菱PLC西门子PLC则是新的步ON后,旧的步才OFF即新、旧的步将同时ON一个扫描周期。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈