监视程序复位指令(WDR)允许S7-200 CPU的系统监视狗定时器被重新触发,这样可以在不引起监视 狗错误的情况下,增加此扫描所允许的时间。
使用WDR指令时要小心, 因为如果您用循环指令去阻止扫描完成或过度的延迟扫描完成的时间,那 么在终止本次扫描之前,下列操作过程将被禁止:
- 通讯(自由端口方式除外) - I/O更新(立即I/O除外) - 强制更新
- SM位更新(SM0,SM5 -- SM29不能被更新) - 运行时间诊断
- 由于扫描时间超过25秒,10ms和100ms定时器将不会正确累计时间。
- 在中断程序中的STOP指令
- 带数字量输出的扩展模块也包含一个监视狗定时器,如果模块没有被S7-200写,则此监视狗定 时器将关断输出。在扩展的扫描时间内,对每个带数字量输出的扩展模块进行立即写操作,以 保持正确的输出。请参考这段描述之后的实例。
提示
如果希望程序的扫描周期超过500 ms,或者在中断事件发生时有可能使程序的扫描周期超过 500 ms时,您应该使用监视程序复位指令来重新触发监视狗定时器。
每次使用监视程序复位指令,您应该对每个扩展模块的某一个输出字节使用一个立即写指令来复位 每个扩展模块的监视狗。
如果您使用了监视程序复位指令允许程序的执行有一个很长的扫描时间,此时将S7--200的模式开 关切换到STOP位置,则在1.4秒内,CPU转到STOP方式。
实例:停止、结束和监视程序复位指令
Network 1 //当检测到I/O错误时:
//强制转换到STOP模式。
LD SM5.0 STOP
Network 2 //当M5.6接通时,允许扫描延长:
//1.重新触发S7--200的监视程序复位。
//2.重新触发第一个输出模块的监视狗。
LD M5.6 WDR
BIW QB2,QB2
Network 3 //当I0.0接通时,终止当前扫描周期。
LD I0.0 END
For--Next循环指令
FOR和NEXT指令可以描述需重复进行一定次数的循环体。每 条FOR指令必须对应一条NEXT指令。For--Next循环嵌套(一个 For--Next循环在另一个For--Next循环之内)深度可达8层。
FOR--NEXT指令执行FOR指令和NEXT指令之间的指令。必须 指定计数值或者当前循环次数INDX、初始值(INIT)和终止值 (FINAL)。
NEXT指令标志着FOR循环的结束。
使ENO=0的错误条件:
H 0006 (间接寻址)
如果允许FOR/NEXT循环,除非在循环内部修改了终值,循环 体就一直循环执行直到循环结束。当FOR/NEXT循环执行的过 程中可以修改这些值。当循环再次允许时,它把初始值拷贝到 INDX中(当前循环次数)。
当下一次允许时,FOR/NEXT指令复位它自己。
例如,给定1的INIT值和10的FINAL值,随着INDX数值增加:1、2、3、 ...10,在For指令和Next指 令之间的指令被执行。
如果初值大于终值,那么循环体不被执行。每执行一次循环体,当前计数值增加1,并且将其结果同 终值作比较, 如果大于终值,那么终止循环。
如果程序进入FOR--NEXT循环时,栈顶值为1,则当程序退出FOR--NEXT循环时,栈顶值也将为1。
表6--57 FOR--NEXT指令的有效操作数
输入/输出 数据类型 操作数
INDX INT IW、QW、VW、MW、SMW、SW、T、C、LW、AIW、AC、*VD、
*LD、*AC
INIT、FINAL INT VW、IW、QW、MW、SMW、SW、T、C、LW、AC、AIW、*VD、
*AC、常数
实例:For--Next循环指令
2 1
Network 1 //当I2.0接通时,外循环(标识1) //执行100次。
LD I2.0
F或 VW100,+1,+100
Network2 //当I2.1接通时,外循环
//每执行一次,内循环执行两次。
LD I2.1
F或 VW225,+1,+2
Network 3 //回路2结束。
NEXT
Network 4 //回路1结束。
NEXT