wcc3885:用子程序作一个计时运算,输出运行分钟数和秒数。主程序在调用子程序时,如果单一M0.0或M0.1闭合时能正常工作并运算正确,但同时有M0.0和M0.1闭合时就出错,是那里出错了呢?
主程序:VD0为当前运行秒数,VD4为运行分钟数
网络1
LD M0.0
CALL SBR1,VD0,VD4
网络2
LD M0.1
CALL SBR1,VD8,VD12
子程序:LD0为过程量,LD4为计时值
网络1
LDSM0.5
EU
+D 1,LD0
网络2
LDD= LD0,59
EU
+D 1,LD4
网络3
LDD>= LD0,60
MOVD 0,LD0
下面是我的回帖:
在同一个扫描周期内多次调用同一个子程序时,不能使用上升沿(EU)和下降沿指令。
在检测信号的上升沿或下降沿时,需要用一个位变量来保存上一扫描周期被检测信号的值。S7-200的操作系统为每一条上升沿或下降沿时指定一个位变量,子程序同时被多次调用时,子程序中某条EU(上升沿检测)指令的这个位变量被多次使用,所以程序运行出错。