关于SIMATIC定时器异步刷新的例子
案例摘自西门子官方文档【SIMATIC PLC 计时器的使用】2009年-1月期
今天在“找答案”栏目中看到这样一个案例,【语句执行的先后顺序问题】,问题链接:
http://www.ad.siemens.com.cn/service/answer/tobe_solution.aspx?Q_ID=189465&cid=1029
直接上案例程序,图示:
从上图可以看到仿真时,C1能够正常计数,而C3无法正常计数。
我在回复是将计数器C3拆分上移到上一个程序段,这样可以正常计数了,图示:
晚上想起这个回复,总感觉还有什么不妥,于是,找出之前保存的西门子官方文档,再看官方的例子,图示:
这个M10.2是否能够被置1可能?
添加定时器“循环”计数次数C1想在那几个循环后能够捕捉M10.2的程序,图示:添加计数器的目的是看定时器“循环”的次数多少时,M10.2被置位。
计数器在定时器不断“循环”驱动下,在不断的进行加计数,但这个M10.2就是像被屏蔽了似的,很难有被置位的可能。
再继续按官方给出的例子,加入程序SFC47到程序段2,看M10.2能否有被置位的可能,图示:当定时器“循环”到第3个周期时,嘿嘿了,这当然是概率问题(官方的原话)。
在仿真器中重新复位M10.2,再看这个M10.2被置位的概率,这个置位有一定概率性,而并不是有一定规律性的,中间的论证和计算过程参见官方该文档说明。
我在没有做此验证前,一直认为要使计数器C3或M10.2有效,必须要将该程序段放置到定时器线圈的上面的程序段位置,目的是让定时器线圈在被cpu刷新前有效,这个理论是“不一定全面”的概念。重新看过官方的例子程序,才领悟到在定时器程序段下面时,也有可能被计数、置位有效。为验证这个理论,再次将网友的程序段上进行仿真,图示:
计数器C3仍然存在有计数的可能,还是那个“概率”问题。
我不全面的回复可能会误导了那位网友,也盼望那位网友能够看到此贴后,能够重新正确认识西门子定时器的刷新机制。
当然,上述例子如同官方文档说明那样,验证只是在一个被假象了的对象下进行的(插入系统块SFC47)后,延时1000mS下的验证。如果仅仅以网友的那几段程序,被计数的可能性基本不存在,只是考虑到可能在实际应用程序中的程序结构性而已。
添加SFC47的目的就是为了延长定时器T1输出端的有效时间长度,也就是为了延长定时器被cpu刷新的几率。当修改SFC47(WT)时间,时间越小,这个计数器C3被计数的概率就越小,图示:将SFC(WT)修改到5mS
这个计数C3被计数的概率仍然存在,这个延时时间已经非常接近于一般的控制程序的扫描周期了,随着定时器循环次数的增加,计数器计数仍然会有概率性地计数,图示:
SIMATIC定时器异步刷新的工作机制,是指定时器定时时间到达后,触点的刷新并非由线圈来决定的,而是由cpu的扫描周期来确定的被灌之为“异步”特性。