首页 百科知识 怎样用命令方块循环执行指令

怎样用命令方块循环执行指令

时间:2024-10-26 百科知识 版权反馈
【摘要】:程序控制类指令可以影响程序执行的流向,合理使用该类指令可以优化程序的结构,增强程序的控制功能。其中,因为顺序控制继电器指令非常重要,已在第5章中专门介绍。END指令只能用于主程序,不能在子程序和中断程序中使用。其作用是执行条件成立时,停止执行用户程序,并令CPU工作方式由RUN转到STOP状态。在嵌套程序中距离最近的FOR指令及NEXT指令是一对。

6.1 程序控制指令

程序控制类指令可以影响程序执行的流向,合理使用该类指令可以优化程序的结构,增强程序的控制功能。这类指令主要有结束、停止、看门狗、跳转、循环、顺序控制继电器等指令。其中,因为顺序控制继电器指令非常重要,已在第5章中专门介绍。

6.1.1 结束、停止和看门狗复位指令

1.结束指令

(1)条件结束指令END。其作用是执行条件成立(左侧逻辑值为1)时结束主程序,并返回主程序的第一条指令执行。

在梯形图中,END指令以线圈形式编程,指令无操作数。END指令只能用于主程序,不能在子程序和中断程序中使用。

(2)无条件结束指令MEND。其作用是结束主程序,返回主程序的第一条指令执行。

在梯形图中无条件结束指令直接接左侧母线。使用编程软件编程时,在主程序的结尾自动生成无条件结束指令(MEND),用户不得输入,否则编译出错。

END和MEND指令的梯形图和语句表格式如图6-1所示。

img181

图6-1 END和MEND指令格式

条件结束指令用于无条件结束指令前结束主程序,用户必须以无条件结束指令结束主程序。在程序的适当位置插入MEND指令可以实现程序的分段调试。

2.停止指令

停止指令STOP。其作用是执行条件成立时,停止执行用户程序,并令CPU工作方式由RUN转到STOP状态。该指令在梯形图中以线圈形式编程,指令无操作数。

img182

图6-2 END和STOP指令的应用

在中断程序中执行STOP指令,该中断立即终止,并且忽略所有挂起的中断,继续扫描程序的剩余部分,在本次扫描周期的最后,将CPU由RUN切换到STOP状态。

图6-2所示的是END和STOP指令的应用。

当I0.0接通时,Q0.0有输出;当I0.1接通时,执行END指令,终止用户程序,并返回主程序的起点,Q0.0仍保持接通,但下面的程序不会执行。

当I0.1断开,接通I0.2时,Q0.1有输出;如果I0.3接通,则执行STOP指令,立即终止程序执行,Q0.0与Q0.1均复位,CPU转为STOP模式。

3.看门狗复位指令

看门狗复位指令WDR(watchdog reset)也称为警戒时钟刷新指令。执行该指令可以将警戒时钟刷新,即延长扫描周期,从而避免看门狗超时错误。WDR指令在梯形图中以线圈形式编程,无操作数。

看门狗的定时时间为500ms,每个扫描周期它都被自动复位一次。正常工作时,程序的扫描周期小于500ms,警戒时钟不起作用。如出现以下情况:

(1)用户程序过长;

(2)出现中断事件,执行中断程序的时间较长;

(3)执行循环指令使程序执行时间过长;这些都可能使扫描周期大于500ms,警戒时钟不再被周期性的复位,看门狗出现超时错误,将停止执行用户程序。为了防止在正常情况下警戒时钟动作,可将警戒时钟刷新指令(WDR)插入到程序的适当地方,使警戒时钟复位。指令格式如图6-3所示。双斜线(“//”)之后的内容为注释部分。

img183

图6-3 WDR指令格式

如果程序的扫描周期大于500ms,则当使能输入M0.0接通时,警戒时钟复位,可以增加一次扫描时间500ms;若M0.0断开,警戒时钟定时时间到,程序将终止当前指令的执行,返回到第一条指令重新执行。

如果使用循环指令FOR-NEXT的执行时间太长,下列操作只有在扫描周期结束后才能执行。

(1)通信(自由口方式除外)。

(2)I/O更新(立即I/O除外)。

(3)强制更新。

(4)SM更新(不能更新SM0和SM5-SM29)。

(5)运行时间诊断。

(6)中断程序中的STOP指令。

6.1.2 跳转指令和标号指令

(1)跳转指令JMP(jump)n。当输入端有效时,跳转指令JMP使程序流程转到指定的标号LBL处执行。

(2)标号指令LBL(label)n。该指令用来指示跳转指令的目标位置。

JMP和LBL指令中的操作数n=0~255,这两条指令必须配合使用,JMP和对应的LBL指令必须在同一个程序块中。

img184

图6-4 JMP和LBL指令举例

图6-4所示的是跳转指令和标号指令应用的例子。当I0.0的常开触点闭合时,程序将跳到标号LBL 3处执行。

在跳转发生的扫描周期中,被跳过的程序段停止执行,该程序段涉及的各输出元件的状态保持跳转前的状态不变,不响应程序相关的各种工作条件的变化。

6.1.3 循环指令

1.循环指令及其功能

循环指令有两条:FOR和NEXT。

(1)FOR,循环开始指令,用来表示循环体的开始。语句表格式:

FOR INDX,INIT,FINAL参数INDX为当前循环次数计数器,用来记录循环次数的当前值;参数INIT和FINAL用来规定循环次数的初值和终值。循环体程序每执行一次INDX的值加1,当循环次数当前值大于终值时,循环结束。

可以用改写FINAL参数值的方法在程序运行中控制循环体的实际循环次数。(2)NEXT,循环结束指令,用来表示循环体的结束,无操作数。

FOR和NEXT指令用来编写需重复一定次数的循环体程序。FOR指令和NEXT指令必须成对使用,可以实现8层嵌套。在嵌套程序中距离最近的FOR指令及NEXT指令是一对。FOR和NEXT指令格式即操作数如表6-1所示。

表6-1 FOR和NEXT指令格式及操作数

img185

在LAD中,FOR指令为指令盒格式,EN为使能输入端,ENO为使能输出端。

当使能输入EN有效时,循环体开始执行,执行到NEXT指令时返回,每执行一次循环体,当前值计数器INDX增1,达到终止值FINAL时,循环结束。

使能输入无效时,循环体程序不执行。每次使能输入有效,指令自动将各参数复位。

2.循环指令示例

如图6-5所示的为循环指令2层嵌套的例子。

img186

图6-5 使循环指令的梯形图和语句表

外循环(标志1)的INIT为1,FINAL为100。当I1.0接通时,每执行一次FOR 与NEXT之间的指令,INDX的值加1,外循环执行100次。当I1.1接通时,外循环每执行1次,则内循环(标志2)执行2次。内循环的VW200自动加1,网络4的内循环结束,网络5的外循环结束。

如果初值INIT大于终值FINAL,则不执行循环。

6.1.4 诊断LED指令

当S7-200PLC检测到CPU系统故障时,主机面板上的SF/DIAG(故障/诊断)指示灯(LED)发出红光。还可以用诊断LED指令控制该指示灯是否发黄光。其指令格式及操作数如表6-2所示。

除使用指令控制其发黄光外,还可以用编程软件系统块(配置LED)复选框选项来控制SF/DIAG发黄光,其共有两个选项。

(1)当有变量被强制时,SF/DIAG LED为ON(黄色)。

表6-2 LED指令格式及操作数

img187

(2)当有I/O错误时,SF/DIAG LED为ON(黄色)。

当两个配置LED选项都不被选中时,SF/DIAG LED发黄光只受诊断LED指令控制。

图6-6所示的为一个使用诊断LED指令的例子。

img188

图6-6 使用诊断LED指令的梯形图和语句表

当I0.0接通时,M0.0为1,则MB0=0000 0001,输入参数IN的值大于0,使SF/DIAG LED发黄光。

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

我要反馈