理论教育 程序流程控制指令的使用方法

程序流程控制指令的使用方法

时间:2023-06-16 理论教育 版权反馈
【摘要】:子程序执行结束之后,通过SRET指令返回主程序,继续执行X002。图5-17 子程序嵌套举例3.中断指令程序执行过程之中如果需要执行另外的功能需要使用中断指令。指令格式指令编号及助记符:主程序结束指令FNC06 FEND。

程序流程控制指令的使用方法

程序执行过程之中,根据工艺的要求,程序可以进行跳转、循环、复位等处理。这些依靠程序流程控制指令完成。

1.条件跳转指令

如果需要程序跳过几步执行下面的程序需要用到跳转指令。

(1)指令格式

指令编号及助记符:条件跳转指令FNC00CJ或CJ(P)。

CJ指令的目的元件是指针标号,其范围是P0~P63(允许变址修改)。该指令程序步为3步,标点步为1步。作为执行序列的一部分指令,有CJ、CJ(P)指令,可以缩短运算周期及使用双线圈。

(2)指令用法

条件跳转指令用于当跳转条件成立时跳过CJ或CJ(P)指令和指针标号之间的程序,从指针标号处继续执行,若跳转条件不成立则顺序执行,以减少程序执行扫描时间。

【实例5-7】说明图5-13的示例中条件跳转指令CJ的用法

X000=ON时,则从1步跳转到36步(标记P8的后一步)。X000=OFF时,不进行跳转,执行X001。

Y001为输出线圈,X000=OFF时,不跳转,采样X001。

X000=ON时跳转至P8,不执行CJ P9,因此,继续采样X012。

(3)跳转程序中软元件的状态

在发生跳转时,被跳过的那段程序中的驱动条件已经没有意义了,所以该程序段中的各种继电器和状态器、定时器等将保持跳转发生前的状态不变。

(4)跳转程序中标号的多次引用

标号是跳转程序的入口标识地址,在程序中只能出现一次,同一标号不能重复使用。但是,同一标号可以多次被引用,如图5-14所示。

978-7-111-35634-9-Chapter05-13.jpg

图5-13 条件跳转指令CJ举例

978-7-111-35634-9-Chapter05-14.jpg

图5-14 同一标号可以多次引用

(5)无条件跳转指令的构造

PLC只有条件跳转指令,没有无条件跳转指令。遇到需要无条件跳转的情况,可以用条件跳转条件来构造无条件跳转指令,通常是使用M8000(只要PLC处于RUN状态,则M8000总是接通的)。如图5-15所示。PLC一旦运行,M8000触点接通,即执行跳转指令,不需要别的条件。

2.子程序调用和返回指令

如果程序比较复杂,会使用到子程序,需要子程序相关指令进行操作。

(1)指令格式

指令编号及助记符。

●子程序调用应用指令FNC01 CALL、CALL(P)。

●子程序返回应用指令FNC02 SRET。

指令的目的操作元件是指针号P0~P62(允许变址修改)。

(2)指令用法

子程序与标号的位置。

978-7-111-35634-9-Chapter05-15.jpg

图5-15 无条件跳转指令的构造

●CALL指令必须和FEND、SRET一起使用。

●子程序标号要写在主程序结束指令FEND之后。

●标号P0和子程序返回指令SRET间的程序构成了P0子程序的内容。

●当主程序带有多个子程序时,子程序要依次放在主程序结束指令FEND之后,并用不同的标号相区别。

●子程序标号范围为P0~P62,这些标号与条件转移中所用的标号相同,而且在条件转移中已经使用了标号,子程序也不能再用。

●同一标号只能使用一次,而不同的CALL指令可以多次调用同一标号的子程序。

【实例5-8】CALL指令应用

图5-16为CALL指令举例。

978-7-111-35634-9-Chapter05-16.jpg

图5-16 CALL指令举例

触点X001闭合之后,执行CALL指令,程序转到P10所指向的指令处,执行子程序。子程序执行结束之后,通过SRET指令返回主程序,继续执行X002。

子程序嵌套如图5-17所示。X001触点闭合之后,执行CALLP11指令,转移到子程序(1)执行,然后X003触点闭合,执行CALLP12指令,程序转移到子程序(2)执行,执行完毕之后,依次返回子程序(1)、主程序。

978-7-111-35634-9-Chapter05-17.jpg

图5-17 子程序嵌套举例

3.中断指令

程序执行过程之中如果需要执行另外的功能需要使用中断指令。

(1)指令编号及助记符

●中断返回指令FNC03 IRET。

●中断允许指令FNC04 EI。

●中断禁止指令FNC05 DI。

(2)指令用法

FX2N PLC有两类中断,即外部中断和内部定时器中断。外部中断信号从输入端子送入,可用于外部突发随机事件引起的中断;定时中断是内部中断,是定时器定时时间到引起的中断。

FX2N PLC设置有9个中断源,9个中断源可以同时向CPU发出中断请求信号,多个中断依次发生时,以先发生为优先;同时发生时,中断指针号较低的有优先权。另外,外中断的优先级整体上高于内中断的优先级。

FX2N系列PLC有3条中断指令:

●EI中断允许指令:对可以响应中断的程序段用中断允许指令EI来开始。

●DI中断禁止指令:对不允许中断的程序段用中断指令DI来禁止。(www.daowen.com)

●IRET中断返回指令:从中断服务子程序中返回时必须用专门的中断返回指令IRET,不能用子程序返回指令SRET。

在主程序的执行过程中,可根据不同中断服务子程序中PLC要完成工作的优先级高低决定能否响应中断。程序中允许中断响应的区间应该由EI指令开始,DI指令结束。在中断子程序执行区间之外时,即使有中断请求,CPU也不会立即响应。通常情况下,在执行某个中断服务程序时,应禁止其他中断。

【实例5-9】中断应用

如图5-18所示,EI~DI之间为允许中断区间,I001、I000、I101分别为中断子程序的指针标号。

978-7-111-35634-9-Chapter05-18.jpg

图5-18 中断指令举例

(3)中断指针

外中断用I指针:

●外中断用I指针的格式如图5-19a所示,有I0~I5共6点。

●外中断是外部信号引起的中断,对应的外部信号的输入口为X000~X005。

内中断用I指针:

●内中断用I指针格式如图5-19b所示,有I6~I8共3点。

●内中断是指机内定时时间到,中断主程序去执行中断子程序。定时时间由指定编号为6~8的专用定时器控制。

●设定时间值在10~99ms间选取,每隔设定时间就会中断一次。

4.主程序结束指令

如果使用子程序功能的话,需要利用主程序结束指令表明主程序的位置。

(1)指令格式

指令编号及助记符:主程序结束指令FNC06 FEND。

(2)指令用法

978-7-111-35634-9-Chapter05-19.jpg

图5-19 中断指针

a)外中断用I指针 b)内中断用I指针

FEND指令是一步指令,无操作目的元件。子程序应写在FEND指令和END指令之间,包括CALL、CALL(P)指令对应的标号、子程序和中断子程序。FEND指令的用法(见图5-20)应注意以下几点。

●CALL、CALL(P)指令的标号P用于在FEND指令后编程,必须要有IRET指令。中断指针I也在FEND指令后编程,必须要有SRET指令。

●使用多个FEND指令的情况下,应在最后的FEND指令与END指令之间编写子程序或中断子程序。

●当程序中没有子程序或中断服务程序时,也可以没有FEND指令。但是程序的最后必须用END指令结尾。所以,子程序及中断服务程序必须写在FEND指令与END指令之间。

978-7-111-35634-9-Chapter05-20.jpg

图5-20 FEND指令的用法

5.监视定时器指令

监视定时器指令主要用于监控程序的执行情况。

(1)指令格式

指令编号及助记符:监视定时器指令FNC07 WDT。

(2)指令用法

WDT指令是用来在程序中刷新监视定时器(D8000)。通过改写存于特殊数据寄存器D8000中的内容,可改变监视定时器的监视时间。程序如图5-21所示。

监视定时器的时间为300ms,如果没有WDT指令,在END处理时,D8000才有效。

WDT指令还可以用于将长扫描时间的程序分割。当PLC的运行扫描周期指令执行时间超过200ms时,CPU的出错指示灯亮,同时停止工作。因此,在合适的程序步中插入WDT指令,用以刷新监视定时器,以使顺序程序得以继续执行到END,如图5-22所示。

978-7-111-35634-9-Chapter05-21.jpg

图5-21 WDT指令举例

978-7-111-35634-9-Chapter05-22.jpg

图5-22 WDT用于分隔程序

6.循环开始指令和循环结束指令

如果某段程序需要进行循环操作,可以使用循环指令操作。

(1)指令格式

●指令编号及助记符:循环开始FNC08 FOR、循环结束FNC09 NEXT。

操作数的软元件:无。

(2)指令用法

循环指令可以反复执行某一段程序,只要将这一段程序放在FOR~NEXT之间,待执行完指定的循环次数后,才执行NEXT下一条指令。循环程序可以使程序变得简练。FOR和NEXT指令必须成对使用,只有在FOR~NEXT指令之间的程序(利用源数据指定的次数)执行几次后,才处理NEXT指令以后的程序。

循环次数由FOR后的数值指定。循环次数范围为n=1~32767时有效。如循环次数<1时,被当作1处理,FOR~NEXT循环一次。若不想执行FOR~NEXT间的程序时,利用CJ指令,使之跳转。循环次数多时扫描周期会延长,可能出现监视定时器错误。NEXT指令在FOR指令之前,或无NEXT指令,或在FEND、END指令之后有NEXT指令,或FOR与NEXT的个数不一致时,会出现错误。

【实例5-10】已知K1X000的内容为7,数据寄存器D0Z的内容为6,分析程序的循环工作过程和次数。

如图5-23所示程序是三重循环的嵌套,按照循环程序的执行次序由内向外计算各循环次数。

(1)单独一个循环[A]执行的次数

当X010为OFF时,已知K1X000的内容为7,所以[A]循环执行了7次。

(2)循环B执行次数(不考虑C循环)。

[B]循环次数由D0Z指定,已知D0Z为6次。B循环包含了整个A循环,所以整个A循环都要被启动6次。

978-7-111-35634-9-Chapter05-23.jpg

图5-23 FOR、NEXT循环指令举例

(3)[C]的程序循环次数由K4指定为4次

在[C]的程序执行一次的过程中,则[B]的程序执行6次,所以A循环总计被执行了4×6×7=168次。然后向NEXT指令(3)以后的程序转移。

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

我要反馈