程序执行过程之中,根据工艺的要求,程序可以进行跳转、循环、复位等处理。这些依靠程序流程控制指令完成。
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所示。
图5-13 条件跳转指令CJ举例
图5-14 同一标号可以多次引用
(5)无条件跳转指令的构造
PLC只有条件跳转指令,没有无条件跳转指令。遇到需要无条件跳转的情况,可以用条件跳转条件来构造无条件跳转指令,通常是使用M8000(只要PLC处于RUN状态,则M8000总是接通的)。如图5-15所示。PLC一旦运行,M8000触点接通,即执行跳转指令,不需要别的条件。
2.子程序调用和返回指令
如果程序比较复杂,会使用到子程序,需要子程序相关指令进行操作。
(1)指令格式
指令编号及助记符。
●子程序调用应用指令FNC01 CALL、CALL(P)。
●子程序返回应用指令FNC02 SRET。
指令的目的操作元件是指针号P0~P62(允许变址修改)。
(2)指令用法
子程序与标号的位置。
图5-15 无条件跳转指令的构造
●CALL指令必须和FEND、SRET一起使用。
●子程序标号要写在主程序结束指令FEND之后。
●标号P0和子程序返回指令SRET间的程序构成了P0子程序的内容。
●当主程序带有多个子程序时,子程序要依次放在主程序结束指令FEND之后,并用不同的标号相区别。
●子程序标号范围为P0~P62,这些标号与条件转移中所用的标号相同,而且在条件转移中已经使用了标号,子程序也不能再用。
●同一标号只能使用一次,而不同的CALL指令可以多次调用同一标号的子程序。
【实例5-8】CALL指令应用
图5-16为CALL指令举例。
图5-16 CALL指令举例
解:
触点X001闭合之后,执行CALL指令,程序转到P10所指向的指令处,执行子程序。子程序执行结束之后,通过SRET指令返回主程序,继续执行X002。
子程序嵌套如图5-17所示。X001触点闭合之后,执行CALLP11指令,转移到子程序(1)执行,然后X003触点闭合,执行CALLP12指令,程序转移到子程序(2)执行,执行完毕之后,依次返回子程序(1)、主程序。
图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分别为中断子程序的指针标号。
图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)指令用法
图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指令之间。
图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所示。
图5-21 WDT指令举例
图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次。
图5-23 FOR、NEXT循环指令举例
(3)[C]的程序循环次数由K4指定为4次
在[C]的程序执行一次的过程中,则[B]的程序执行6次,所以A循环总计被执行了4×6×7=168次。然后向NEXT指令(3)以后的程序转移。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。