技术论坛

 技术专题探讨-SIMATIC PLC 计时器的使用

返回主题列表
作者 主题

奇侠

经验值:6088
发帖数:3970
精华帖:20
楼主    2008-12-15 16:44:43
主题:技术专题探讨-SIMATIC PLC 计时器的使用
大家在编写STEP 7程序时,会经常用到Timer计时器,但在使用过程中有很多疑问,感觉有时候程序执行与自己所想要得结果有出入,逻辑上分析看不出有任何问题,那么为什么会有这样的现象呢?Timer计时器的执行与CPU的程序扫描周期有什么关系呢?我们应该如何来使用Timer呢?
我们会在以下针对此话题通过相关的程序进行讨论,期间也会有西门子工程师上线与大家交流。希望通过这次讨论使大家在今后能更好的理解和使用Timer计时器。
请首先让我们来一起关注以下两个问题:
1)下图中,M10.2能否被置位?


2)下图中,S_CU计数有无问题,M6.2能否被置位?



此次集中探讨将持续至2009年1月7日,其中有突出表现的网友将获得加倍精华奖励积分;最终所有有效留帖的网友将获得加倍发帖积分;根据交流情况,会酌情赠送小礼品。
交流结束后也将整理精华内容,供广大网友分享参考;还将公布获奖网友名单。
老兵
至圣

经验值:55228
发帖数:9627
精华帖:489
    2008-12-17 11:36:33
精华帖  主题:回复:技术专题探讨-SIMATIC PLC 计时器的使用
客服出马了?呵呵
TIMER是独立于OB1的扫描周期的,只要触发条件满足,它就一直工作。因而,M6.2与M10.2都是可能被置1的。比如当在NETWORK3被执行前恰好有一个中断请求发生,那如果中断程序执行过程中TIMER恰好计时完毕的话,M6.2与M10.2就应该可以置位了。
验证计时器与OB1的扫描是否同步好作:在中断中(例定时中断或事件中断)调用计时器就可以。
管理员注:本帖已被纳入此次探讨整理结果,请点此详阅
天生不宜做胜利者,自来没有胜利的欲望,只是不甘失败,十分十分不甘心失败。木心
Harry_dong
侠士

经验值:1403
发帖数:485
精华帖:16
    2008-12-17 14:01:43
精华帖  主题:回复:技术专题探讨-SIMATIC PLC 计时器的使用
看过老兵和客服的贴子我有了新的认识:我的新观点定时器与扫描周期是异步的,定时时间到就动作。通过下面的试验PLC:CPU313C-2DP;程序中只包含OB1:利用SFC47延长用户程序时间能够更仔细的观察M10.2怪异现象!
a试验:AN T 3
L S5T#1S
SD T 2
A T 2
L S5T#1S
SD T 3
CALL SFC47
WT:=5000
A T 3
S M 10.2
测试结果:WT值 扫描周期 M10.2被置位的几率
5000 6ms 偶尔置不上
100 1ms 经常置不上
不添加SFC47 <1ms 有机会置上
通过以上结果可以看出M10.2还是有机会被置位的,而且被置位的几率和扫描周期的长短有关系,在不添加SFC47的情况下如果使用更高的CPU可能被置位机会更少。
b试验:移动调用SFC47的位置
CALL SFC47
WT:=5000
AN T 3
L S5T#1S
SD T 2
A T 2
L S5T#1S
SD T 3
A T 3
S M 10.2
测试结果:WT值无论大小M10.2被置位的可能性都很小,那么可以得出结论M10.2置位的可能性不直接与扫描周期的长短有关,而是与从AN T3到A T3之前的这段程序执行时间和扫描周期时间的比值有直接关系。
也就是:如果从AN T3到A T3之前的这段程序执行时间所占总的扫描周期时间的比重比较大那么T3在这其间定时时间到的可能性比较大,它被置位的可能性就大,由此可以看出定时器是时间到就有动作。
管理员注:本帖已被纳入此次探讨整理结果,请点此详阅
学无止境
eaglesky
侠圣

经验值:2929
发帖数:664
精华帖:22
    2008-12-18 08:08:16
精华帖  主题:回复:技术专题探讨-SIMATIC PLC 计时器的使用
昨晚回去用模拟器研究了一下。做了部分实验,前面的实验就不说了,因为后面的实验推翻了我前面的分析。
根据 老兵 的提示,我在原程序的N2和N3之间增加了一段类似Harry_dong 提出的功能的程序,就是增加一段延时,不过我用是通过间接的调用中断OB35完成的。
实验结果是,M10.2完全有机会被置位! 并且,延时的时间越长,机会越大。
不过和Harry_dong 的结论,我的想法不完全相同。
我记得以前用315-2DP的实体CPU试过,即时在中断中调用timer,timer一旦触发之后,计时就开始了,并在“后台”计时,也就是说,和扫描周期以及timer被调用的周期没有直接关系。
在原程序中,由于程序及其简单,只有这三条语句,并且N2和N3紧紧相连,中间的语句执行间隔时间及其的短,加上有N2这句可以对T3复位的语句,且复位是“即时”生效的,Timer的动作条件能刚好赶在N2和N3之间的几率实在是太小了。这些条件导致N3这句能够捕捉到T3动作的几率变得非常非常的小。而加上了延时之后,在延时期间内,T3完成了动作条件的满足以及动作执行的时间,导致了原来的N3这句能够捕捉到T3动作的几率变的很大。并且可以进一步实验:修改T3的时间和N2、N3之间的延时时间,让延时时间大于T3时间,实验结果是M10.2必然会被置位。逐步增大T3时间或者减小延时时间或者两者同时进行,则逐渐开始出现M10.2不能被置位的情况,时差越大,被置位的几率越低。实际上,在原程序中,如果把N1和N2的位置颠倒,也就是让T3滞后一个周期被复位,或者将N3语句提前,争取在T3被复位前捕捉动作,捕捉的成功率就会比原程序大了不少。
和Harry_dong 结论不同的是在timer的动作上。是不是timer的时间到了就有动作,我的观点是,动作和时间到还是没到不是必然的结果,而是在于程序的调用上,时间是动作的前提而已。也就是说,如果时间没到,则一定不会有动作,如果时间到了,而程序还没有执行到对timer动作的调用时,还谈不上timer的动作,只有执行到对timer动作的调用程序才体会到timer的动作。换句话说,timer从被触发开始,在没有被复位之前,脱离了程序和扫描周期在计时,计时到了之后,才在相应的程序语句中体现出动作。
管理员注:本帖已被纳入此次探讨整理结果,请点此详阅
没有个性的签名就别签了。
shine
至圣

经验值:19950
发帖数:8944
精华帖:39
    2008-12-18 14:51:21
精华帖  主题:回复:技术专题探讨-SIMATIC PLC 计时器的使用
为什么Harry_dong的程序1中M10.2状态不确定,而程序2是确定的?可以通过T3分别在3个Network之前、之后达到定时时间进行分析。
我记得以前S7 200系统手册中对于1ms、10ms、100ms定时器有类似的分析,而新版里找不到了。300的定时器工作机理应该类似于200中1ms定时器。
管理员注:本帖已被纳入此次探讨整理结果,请点此详阅
万泉河
至圣

经验值:28649
发帖数:10889
精华帖:131
    2008-12-19 23:11:02
精华帖  主题:回复:技术专题探讨-SIMATIC PLC 计时器的使用
这两段程序都是有缺陷的。
我们不能假定一个场景下他能够正确运行,就认为他可以使用。
这不是一种好的习惯。
还有那些指望各个network相互对调一下位置,就能使程序正确运行的思路也是很害人的。也不是好习惯。

我们在设计程序时,应该尽量做到其足够健壮。

上面的程序,将T3的状态送给一个M位,然后程序调用时都以M位替代就可以实现目标了。

管理员注:本帖已被纳入此次探讨整理结果,请点此详阅
微信公众号:PLC标准化编程,ZHO6371995
四书五经
侠圣

经验值:3650
发帖数:780
精华帖:58
    2008-12-20 22:46:46
精华帖  主题:回复:技术专题探讨-SIMATIC PLC 计时器的使用
看到第一个问题,我首先想到的是STEP7 MICROWIN帮助里的识别 S7-200 定时器指令一节中,关于S7-200三种分辨率定时器更新方式的介绍。原文如下:
1毫秒分辨率
1毫秒定时器记录自现用1毫秒定时器启用以来1毫秒定时器间隔的数目。执行定
时器指令即开始计时;但是,1毫秒定时器每毫秒更新一次(定时器位及定时器
当前值),不与扫描循环同步。换言之,在超过1毫秒的扫描过程中,定时器位
和定时器当前值将多次更新。

10毫秒分辨率
10毫秒定时器记录自现用10毫秒定时器启用以来10毫秒定时器间隔的数目。执行定时器指令即开始计时;但是,在每次扫描循环的开始更新10毫秒定时器,其方法是以当前值加上积累的10毫秒间隔的数目(自前一次扫描开始算起)(换言之,在整个扫描过程中,定时器当前值及定时器位保持不变)

联想到S7-300/400里S5定时器的最小时基是10MS(也就是说最小分辨率为10MS),开始想S5定时器更新方式可能和200中10毫秒定时器的更新方式差不多,但经过前面兄弟的讨论再加上做实验,应该能够断定S5定时器的更新方式和200中10毫秒定时器的更新方式不一样,而应该和S7200中1MS定时器的更新方式一样,异步更新,与扫描周期没有关系。但S5定时器的最小时基是10MS,它应该是10MS更新一次定时器当前值和定时器位。这样的话就会出现这种情况:当OB1扫描周期远小于10MS时,定时器在一个扫描周期内不会更新状态位,而可能在几个扫描周期后,在OB1的任何位置更新状态位。如当OB1扫到最后时,定时器的当前值为799(以8S为例,时基为10MS),这时OB1检测T3定时器位为FALSE,置位指令不执行。当下一个扫描周期开始时,T3定时器当前值为800,T3定时器位为TURE,T2复位,根据逻辑,T3定时器被复位。OB1扫描到最后,检测T3定时器位仍然为FALSE,所以置位指令还是不执行。而也有可能正好OB1扫描到最后时,定时器当前值正好为800(以8S为例,时基为10MS),这时T3定时器位为TRUE,S指令会置位。这也解释了楼上兄弟说偶尔也看到过S指令置位的情况。但这种概率几乎不可能。当调用SFC47,延长扫描周期时,扫描周期越接近10MS,S指令置位的概率就越大,当扫描周期远大于10MS时,概率几乎100%(也就是说在一个扫描周期内定时器肯定会更新一次)。
其实在STEP7 MICROWIN帮助里有SIEMENS的解决方案,程序如下图所示(程序虽不一样,但原理一样):

管理员注:本帖已被纳入此次探讨整理结果,请点此详阅
无名
侠士

经验值:1777
发帖数:913
精华帖:11
    2008-12-22 16:06:02
精华帖  主题:回复:技术专题探讨-SIMATIC PLC 计时器的使用
时间继电器的动作异步指的是满足触发条件,
在程序执行的过程中,即使没有扫描到,
在计时到达之前,时间一直在“走”的,进行计时。
如果在程序中频繁多处用到的这个T的条件,
那么在同一扫描周期里,计时快要到了的时候,
就很可能出现前几个T作为条件没有为1,而后面T为1的情况。
那么经常会出现所谓的“误"动作,同一个T作为条件,
在程序中用的次数越多,出错的概率就越大。
所以在程序中用T作为条件尽量单一,最好用M来进行中转。
管理员注:本帖已被纳入此次探讨整理结果,请点此详阅
师出无名
shine
至圣

经验值:19950
发帖数:8944
精华帖:39
    2008-12-24 09:50:53
精华帖  主题:回复:技术专题探讨-SIMATIC PLC 计时器的使用
plc的每条指令,根据当前状态,执行结果是确定的,但是这个当前状态是在变化的,条件变了,结果就会跟着改变,如果编写程序没有完整考虑各种状态,就可能出现和自己预计不一样的状态,程序就可能出问题了。
程序1为什么会出现这种不确定呢?是因为S5定时器的执行机理决定的。我同意四书五经的说法,S5定时器是异步刷新的,脱离扫描周期和程序的扫描。
试验证明程序1中,M10.2有可能被置位,也有可能不会被置位,为什么呢?让我们从T3在不同时候达到定时时间来进行分析:
1、如果T3在Network1之前达到定时值,那么经过Network1,T2复位,Network2中T3复位,所以M10.2不能置位。
2、如果T3在N1执行之后,N3执行之前定时时间到,那么,T2的状态要到下一个扫描周期执行到N1时才会被改变,所以T3保持为1,M10.2会被置位。
3、如果T3在N3之后置位,要到下一扫描周期才能执行N1~N3的程序,那么情况同1,M10.2不会被置位。
所以这也解释了为什么只有这3段程序时,M10.2很难被置位,而在N1和N3之间增加一段需要较长执行时间的程序后,M10.2被置位的几率大大增加,但不是100%,因为之间的时间长了,刚好在这段时间内达到定时时间的几率增加了。
管理员注:本帖已被纳入此次探讨整理结果,请点此详阅
老兵
至圣

经验值:55228
发帖数:9627
精华帖:489
    2008-12-26 08:36:33
精华帖  主题:回复:技术专题探讨-SIMATIC PLC 计时器的使用
quote:以下是引用西门子技术支持与服务在2008-12-23 11:06:03的发言:

对于“计时器的动作是在下一个扫描周期”的说法能不能找到理论或实践来证明呢?
这个结论到底是对的还是错的呢?
这对我们分析程序会有很大帮助


我认为关于这个结论的验证已经有了方案,比如“塔吊”在NETWORK3前加了一段“wait"的代码。
如果利用“wait"代码让OB1的扫描周期大于T3的计时周期,比如,把T3与T2的计时时间都设定为20ms,而OB1的扫描周期控制在大于50ms以上,那就很容易的判断T究竟是动作在本周期还是下一个周期了。
管理员注:本帖已被纳入此次探讨整理结果,请点此详阅
天生不宜做胜利者,自来没有胜利的欲望,只是不甘失败,十分十分不甘心失败。木心
lightroat
侠士

经验值:1493
发帖数:337
精华帖:5
    2009-01-04 19:12:04
精华帖  主题:回复:技术专题探讨-SIMATIC PLC 计时器的使用
高手过着,果然不同凡响
刚接触300,看了各位的帖子,颇有收获。感谢斑竹发起的这次探讨,为大家提共了这个契机。
一直以来对300的定时器感到困惑,不知道他的刷新时间是怎样的。与200不同,200的定时其在siemens管方资料上说的很清楚,三种时基的定时其的刷新时间是不一样的,但300的却没有提及。
今天看到一个关于200定时器触点不能动作的帖子,看完后我在plcsim上模拟,但是和预想不一致,很是困惑,突然间意识到这是300的模拟器,难道300和200差好多么?于是旧伤又被触痛了。想起好像有一个这样的专题。
经过各位的讨论,基本已经有了定论,本人狗尾续貂一下。
对于楼主的问题,我觉得如果必须搞清以下问题
1 定时器是如何刷新的?也就是“同步”“异步”的问题。
2 如何解释Harry_dong 等提出的无规律“置位”的“灵异现象”。
对于1已有定论。理论上似乎可以借鉴200定时器的刷新规律。实践上,老兵大师已给出了美妙绝伦的方案,并且“塔吊”(感谢塔吊,让我认识了wait)已完美得到验证。
对于2其实也给出了答案。正如shine所说“从T3在不同时候达到定时时间来进行分析”。
结论:300的定时其的工作机理与200的分辨率为1ms的定时器的机理是一样的,就是以时基为单位刷新,即使没有扫描到线圈。
在说两句
1 很多迹象表明定时器是独立ob刷新的。如定时器在子程序、中断里都可以计时;在200中,定时器似乎是受内部时钟控制,定时器的计时并不总是从“0”计时的,而是最大延迟一个世基的时间,不知道300如何。
3 正如200中那样,关于300在子程序中的一些现象,本人不太明白,不只那位大师可以和我们分享以下。
万能的主啊,请把老兵的IQ分给我一点...
ps
我模拟的自复位定时器的程序在加了wait延时后,和理论一致。
管理员注:本帖已被纳入此次探讨整理结果,请点此详阅
二人行,必有吾师。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。