| 作者 | 主题 |
|---|---|
|
squall001 新手 经验值:5 发帖数:1 精华帖:0 |
楼主
主题:FOR循环里面定时器问题
用T37的TON定时器,把他嵌套在FOR循环里面,但是在循环断开后定时器的当前值不会回零,这是怎么回事?
代码如下: LD I0.0 FOR VW100, 1, 100 LD SM0.0 TON T37, 35 LD T37 +I 1, VW102 NEXT |
|
Automann 至圣 经验值:18299 发帖数:6168 精华帖:137 |
8楼
主题:回复:FOR循环里面定时器问题
这里有的帖子我看不懂,只好用最笨的办法,运行和监控楼主的程序。为了便于观察,我把定时器的设定值改为30000。
下面是我看到的现象: 1)接通I0.0的常开触点,定时器的当前值以100为单位增大,实际的定时时间为30s(30000/100=300ms)。因此定时器线圈指令不应放在循环程序里。 2)30s后,T37的常开触点闭合,每个扫描周期VW102的值加100。 3)断开I0.0的触点,VW102的值保持不变。接通I0.0的触点,VW102的值在保持值的基础上继续增大。 4)因为T37的线圈用SM0.0控制,它的线圈不会断开,T37不能复位。 上述现象的解释如下: 1)作为应用指令,FOR指令的调用条件不满足时(I0.0为0状态),循环程序不会被执行(一次也没有执行),其中的定时器指令也没有执行,因此它的当前值和VW102的值保持不变。 2)作为普通的定时器,T37在它的线圈指令被执行时进行定时。循环条件满足时,每次扫描要执行100次T37的线圈指令,因此T37的定时速度比普通情况要快100倍。 3)30s后,T37的常开触点闭合,每个扫描周期要执行100次“+I”指令,所以每个扫描周期VW102的值加100。 4)任何情况T37的线圈都不会断电,所以它的当前值不会回零。这个例子提示我们,除了考虑定时器线圈通电工作,一定要考虑定时器复位的条件,否则你的定时器就只能用一次。
追求完美
|