西门子S7-200程序控制指令
程序控制指令用于对程序流转的控制,可以控制程序的结束、分支、循环、子程序或中断程序调用等。通过程序控制指令的合理应用,可以使程序结构灵活、层次分明,增强程序功能。
1)结束指令END/MEND

END指令用于在执行条件成立时结束主程序,返回程序起点。MEND指令则是编程软件STEP7-Micro/WIN32自动在主程序结束时加上的,用于标志主程序的结束。

指令说明
(1)两条指令均为无操作数指令。
(2)结束指令只能用于主程序中,不能在子程序和中断程序中使用。
2)暂停指令 STOP
在执行条件成立时,能够使PLC的运行方式从运行状态(RUN)转为停止状态(STOP),同时立即终止程序的执行。

I0.0闭合时,STOP指令运行,PLC工作方式立即从运行转变为停止方式。I0.0为断开,则程序正常运行。

STOP指令在程序中常用于处理突发紧急事件;STOP指令无操作数。
3)监视定时器复位指令WDR
为保证CPU系统可靠运行,PLC内部设置了系统监视定时器WDT(watch dog timer),用于监视扫描周期是否超时。系统正常工作时扫描周期会小于WDT的定时设置值(默认为300ms),在每个扫描周期内扫描到WDT时,系统都会对WDT复位一次,从而保证WDT不会报警。但当系统出现故障时,扫描周期有可能超过WDT的定时设置值,这时WDT 不能在设置值范围内被复位,则报警并停止CPU运行,同时复位输入输出。
但有时在程序正常运行情况下,由于程序过长或使用中断指令、循环指令会使扫描周期超过WDT定时器的设置值,为避免使监视定时器动作,就需要在程序中使用WDR指令人为复位WDT定时器。

I0.0闭合时,WDR指令运行,复位系统监视定时器WDT。
4)跳转与标号指令 JMP、LBL

(其中N为0~255的常数)
JMP 跳转指令,在预置触发信号接通时,使程序跳转到N 所指定的相应标号处。
LBL标号指令,标记跳转的目的地的位置。由N来标记与哪个JMP指令对应。
图为JMP、LBL指令应用:

在I0.0闭合期间,程序会从Network1跳转到Network8的标号1处继续运行。在跳转发生过程中,被跳过的程序段Network2到Network7停止执行。
指令说明
(1)JMP和LBL指令必须成对使用于主程序、子程序或中断程序中。主程序、子程序或中断程序之间不允许相互跳转。
(2)多条跳转指令可对应同一标号,但不允许一个跳转指令对应多个相同标号。
(3)执行跳转指令时,跳过的程序段中各元件的状态如下① 各输出线圈保持跳转前的状态。
②计数器停止计数,当前值保持跳转之前的计数值。
③ 1ms、10ms定时器保持跳转之前的工作状态,原来工作的继续工作,到设置值后可以正常动作,当前值要累计到32767才停止。100ms定时器在跳转时停止工作,但不会复位,当前值保持不变,跳转结束后若条件允许可继续计时,但已不能准确计时了。
(4)标号指令LBL一般放置在JMP指令之后,以减少程序执行时间。若要放置在JMP指令之前,则必须严格控制跳转指令的运行时间,否则会引起运行瓶颈,导致扫描周期过长。
例:某生产线对产品进行加工处理,同时利用增减计数器对成品进行累计,每当检测到100个成品时,就要跳过某些控制程序,直接进入到小包装控制程序。每当检测到900个成品(9个小包装),直接进入到大包装程序。相关控制程序如图:

5).循环指令FOR和NEXT

INDX记录循环次数,每执行1次循环体,自动加1,并与终值比较,大于时,停止;
INIT:循环次数的初值;FINAL:循环次数的终值
◆FOR 标记循环程序的开始。
◆NEXT 标记循环程序的结束无操作数。
◆FOR与NEXT共同构成循环指令,用于重复执行指定次数的FOR与NEXT之间的循环体指令段。
指令说明
(1)FOR、NEXT指令必须成对使用。
(2)初值大于终值时,循环指令不被执行。
(3)每次EN端口执行条件重新有效时,自动复位各参数,同时将INIT指定初值放入当前循环计数器中,使循环指令可以重新执行。
INDX记录循环次数,从1开始计数,每执行1次循环体,自动加1,并与终值比较,大于时,停止;
INIT指定循环次数的初值;FINAL指定循环次数的终值
指令应用举例
图为FOR、NEXT指令应用。当l0.0接通时,将INIT指定初值放入W100中,开始执行循环体,W100中的值从1增加到8,循环体执行8次,WW100中的值变为9(9>8)时,循环结束。
FOR、NEXT指令应用

6).子程序
(1)建立子程序
可以选择编程软件“编辑”--“插入”--“子程序”。默认的子程序名为SBR_N,编号N的范围为0~63,从0开始按顺序递增;
也可以通过重命名命令为子程序改名。
(2)子程序调用与返回指令CALL、CRET指令

CALL 子程序调用指令,当EN端口执行条件存在时,将主程序转到子程序入口开始执行子程序。SBR_N是子程序名,标志子程序人口地址。
CRET 有条件子程序返回指令,在其逻辑条件成立时,结束子程序执行,返回主程序中的子程序调用处继续向下执行。
子程序调用应用举例1
a)I0.0闭合,调用子程序SBR_0,子程序所有指令执行完毕,返回主程序调用处,继续执行主程序。每个扫描周期子程序运行一次,直到I0.0断开。在子程序调用期间,若I0.1闭合,则线圈Q0.0接通。
b)在M0.0闭合期间,调用子程序DIANJI,在子程序执行期间,若I0.3闭合,则线圈Q0.1接通;I0.4断开且I0.5闭合,则MOV_B指令执行;若I0.4闭合,则执行有条件子程序返回指令CRET,程序返回主程序继续执行,MOV_B指令不运行。

例2:2重循环程序

7).与ENO指令
某些指令的指令盒右侧设有"ENO"使能输出,若EN端有"能流"且指令被正常执行,则ENO端会将"能流"输出,传送到下一个程序单元。如果指令运行出错,ENO端状态为0。

