您现在所在的是:

PLC论坛

回帖:2个,阅读:1600 [上一页] [1] [下一页]
6047
liaosun
文章数:1398
年度积分:50
历史总积分:6047
注册时间:2003/5/4
发站内信
2015论坛贡献奖
2014论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011博客贡献奖
2010博客杰出贡献奖
发表于:2012/3/4 22:06:51
#0楼
   网友squall001发帖问:用T37的TON定时器,把他嵌套在FOR循环里面,但是在循环断开后定时器的当前值不会回零,这是怎么回事?    下面是他的源程序:
LD     I0.0
FOR    VW100, 1, 100
LD     SM0.0
TON    T37, 35
LD     T37
+I     1, VW102
NEXT
   为了便于观察,我把定时器的设定值改为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的线圈都不会断电,所以它的当前值不会回零。这个例子提示我们,除了考虑定时器线圈通电工作,一定要考虑定时器复位的条件,否则你的定时器就只能用一次。
   显然定时器线圈指令不应放在循环程序里,一个扫描周期不应多次执行同一个定时器的线圈指令。
   下面是S7-200的系统手册介绍的分辨率对定时器的影响:
   对于1 ms分辨率的定时器来说,定时器位和当前值的更新不与扫描周期同步。对于大于1ms的程序扫描周期,定时器位和当前值在一次扫描内刷新多次。
   对于10ms分辨率的定时器来说,定时器位和当前值在每个程序扫描周期的开始刷新。定时器位和当前值在整个扫描周期过程中为常数。在每个扫描周期的开始会将一个扫描累计的时间间隔加到定时器当前值上。
   对于分辨率为100 ms的定时器,在执行指令时对定时器位和当前值进行更新;因此,确保在每个扫描周期内,程序仅为100毫秒的定时器执行一次指令,以便使定时器保持正确计时。
此帖来自中华工控网工控博客
原文件地址:http://blog.gkong.com/more.asp?id=149805&Name=liaochangchu
我是廖常初,是一个高校的老师,曾在企业从事机械、电气技术工作,长期从事工业控制和PLC应用的教学、科研和工程应用工作。博客中的日志除注明外均为原创。愿意在此与大家探讨工控的问题!
廖常初工控博客地址:http://blog.gkong.com/blog.asp?name=liaochangchu
我曾写过几本小书: 《PLC编程及应用》第3版(S7-200)、《S7-300/400 PLC应用技术》第3版、《FX系列PLC编程及应用》第2版、《S7-200 PLC编程及应用》、《PLC基础及应用》第2版(FX系列大专教材)、《西门子人机界面(触摸屏)组态与应用技术》、《西门子工业通信网络组态编程与故障诊断》、《S7-1200 PLC编程及应用》第2版、《跟我动手学S7-300/400 PLC》、《跟我动手学FX系列PLC》
机械工业出版社廖常初图书专题:http://www.gkong.com/zt/liaochangchu/
9688
Kate
文章数:1123
年度积分:65
历史总积分:9688
注册时间:2002/3/24
发站内信
发表于:2012/3/7 11:51:28
#1楼
这种现象我个人认为大概可归于西门子的硬件缺陷吧, 在西门子出版的系统手册(2000.11版)中有这样的描述:100ms定时器在每次扫描周期的开始刷新……,如果在一个扫描周期内多次相同的100ms定时器指令,就会造成多计时间。
在本例中I0.0只需要一个上升沿脉冲(在I0.0后加一个P指令)就可令循环执行一遍,对T37连续执行100次,按照西门子的说法,T37的当前值便会在瞬间累计到100×100ms=10s,那么T37的位早就应该ON了,然而我监控的结果却是T37当前值仍为0,位也不会ON,后面再来几次I0.0的上升沿脉冲都不能刷新,这就费解了,唯一的合理解释只能是I0.0上升沿几乎都不是在每次扫描周期的开始,导致T37不能刷新,这个总觉得很牵强,不知我的看法对不对?
其次,本例中的循环无异于将T37的指令连续写上100次,实在是找不到任何理由来支持需要这样的编程思路。
人有人意我有我意合得人意恐非我意合得我意恐非人意人意我意恐非天意合得天意自然如意
4315
mkn377
文章数:821
年度积分:50
历史总积分:4315
注册时间:2011/7/31
发站内信
发表于:2012/3/7 21:00:17
#2楼
学习

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

46.8003