发布于 2006-07-17 09:47:32
0楼
假设MW70=1,
小弟认为,按照梯形图的扫描顺序,MW20的数值应该每隔10秒增加1才对.
可是在实验中,T0的常开接点从未导通过.MW20的数值也不增加.
这到底是怎么回事啊.望各位高手指教.
配置:S7-300,CPU315-2DP
以下是对《请教一个关于定时器的问题》的回复:
共有33人回复 分页: 1
teamo.wan: 引用 加为好友 发送留言 2006-6-30 14:12:00
刘万波: 引用 加为好友 发送留言 2006-6-30 18:36:00
你用T0置位M0.0,用M0.0的上升沿来让MW70+MW20=MW20,然后再用上升沿着个点复位M0.0,试试看也许行。
喻晶: 引用 加为好友 发送留言 2006-6-30 19:54:00
群: 引用 加为好友 发送留言 2006-6-30 20:31:00
赫赫 俺记得300
定时器好像是每次扫描开始时或不停刷新(根据时基不同)
假如在你这段程序之前已经记到10秒的话,t0已经置位
那t0闭点断开,t0线圈失电,t0开点不可能导通
如果是不停刷新的话,那只有在你的两条指令之间是正 好到达十秒
才执行
具体记不太清了,翻番资料吧
teamo.wan: 引用 加为好友 发送留言 2006-7-3 8:16:00
TO 群:
你说:"那t0闭点断开,t0线圈失电,t0开点不可能导通".应该不对吧,T0线圈失电的话,则T0闭点在下一个扫描周期里面就闭合了,重新开始计时.计时达到的话,T0开点闭合(则T0闭点断开),则在又一个扫描周期里,T0线圈失电......如此循环下去.应该会计数的啊
群: 引用 加为好友 发送留言 2006-7-3 9:11:00
对不起,是我和200弄混了,你的程序有问题
AN T2 和A T2是自相矛盾的 T2在一个周期内只能是一种状态
你可以加一个中间变量
在原程序的基础上把T0 闭点变成m0.0开点
然后在你程序的后面加一句
AN T 0
= M 0.0
即M 0.0和T0作为两个不同的地址,在一个周期可以同时为“1”
对于这样的计时器,触发条件和时间到同时为“1”,是加法执行的必要条件。
可以试试 呵呵
teamo.wan: 引用 加为好友 发送留言 2006-7-3 14:26:00
在台达,AB,施耐德PLC里面,写入这样的程序是没有问题的!
难道程序中用了常开接点,就不能用常闭合节点?
散步: 引用 加为好友 发送留言 2006-7-3 17:01:00
teamo.wan你好:
你的程序没有错只是顺序不对.PLC是顺序循环扫描的.你把第七网络和第八网络调换一下就可以了.MW20的数值也就会增加了.你试一下后请回复.
teamo.wan: 引用 加为好友 发送留言 2006-7-4 14:04:00
TO 散步:
兄弟,谢谢了.我试过了可以.但小弟认为按PLC顺序扫描的原理,上面的程序也应该没有错啊:
T0线圈计时到达时,T0常闭点断开,但NETWORK 7 已经被执行过了,在当前的扫描周期内不会再被执行,所以T0线圈在当前扫描周期内不会失电.则T0常开点闭合,ADD指令被执行.等到下一个扫描周期到来时,执行NETWORK 7时,由于T0常闭点断开,则T0线圈失电.则T0常开点断开,这样一来,T0常闭点闭合.在又一个扫描周期里,由于T0常闭点闭合,T0线圈重新开始计时.如此循环下去,应该是可以实现数值增加的啊!
以上是我的推理,望兄弟指点.
happyoicq: 引用 加为好友 发送留言 2006-7-4 15:36:00
happyoicq: 引用 加为好友 发送留言 2006-7-4 15:36:00
阿连: 引用 加为好友 发送留言 2006-7-4 16:11:00
TO teamo.wan:你理解错了,这一个周期里,T0的状态是T存储区里立即被复位,而程序里一个周期扫描读值一次.
阿连: 引用 加为好友 发送留言 2006-7-4 16:13:00
而且你的M60.5是否常通.(__)
teamo.wan: 引用 加为好友 发送留言 2006-7-4 16:37:00
TO 阿连:
m60.5是常通的."T0的状态是T存储区里立即被复位"是什么意思?.估计你完全没有明白我的推理过程
teamo.wan: 引用 加为好友 发送留言 2006-7-5 8:28:00
有哪位高手能帮我解决上面的问题吗??
萨那科长: 引用 加为好友 发送留言 2006-7-5 9:03:00
这个问题我也遇到过,当时用T0线圈对M0.0置位,而T0的触点全用M0.0代替就可以了。用上升沿指令的话把一切问题解决。
群: 引用 加为好友 发送留言 2006-7-5 11:09:00
我想了想,10s时基是100ms、1s、?
如果定时器是不停刷新的话,那么就会出现你的问题
假设是不停刷新的话(不管程序执行到哪,只要条件满足,定时器指令执不执行,定时器逗刷新)
如果在你这段程序之前已经记到10秒的话,t0已经置位,那t0闭点断开,t0线圈失电,t0开点不可能导通
那只有在你的两条指令之间是正 好到达十秒才执行
而把指令提前看起来可以解决,按新程序,如果时间在你的两条指令之间是到达十秒时,那你就会错过一次相加,所以这样也不能解决问题
可以问问siemens的技术支持定时器刷新方式
以上个人理解,希望高手指正
群: 引用 加为好友 发送留言 2006-7-5 15:53:00
我说的对不对呀大家讨论哪,问题太简单嘛
teamo.wan: 引用 加为好友 发送留言 2006-7-5 16:14:00
TO 群:
你说的很有道理,解释的很好.现在我比较怀疑:DELTA,AB等PLC用这段程序为什么可以实现了.
可以留下你的联系方式吗,以后方便交流
群: 引用 加为好友 发送留言 2006-7-5 16:16:00
呵呵,我的qq676743152
teamo.wan: 引用 加为好友 发送留言 2006-7-7 8:37:00
TO 群:
兄弟,实在抱歉,我们公司不让用QQ,只能用MSN
我的MSN:wanweiwei2006@hotmail.com
群: 引用 加为好友 发送留言 2006-7-7 9:34:00
我的msn:gaoaiqun_2006@hotmail.com
我没用过,呵呵,不知到怎末加别人
苗子: 引用 加为好友 发送留言 2006-7-7 17:23:00
你的程序有问题,不能使用T0非来采集定时器的脉冲,西门子的不能这样使用。日本的PLC才可以这样使用。
群: 引用 加为好友 发送留言 2006-7-7 17:26:00
苗子谈谈为什么
苗子: 引用 加为好友 发送留言 2006-7-9 12:15:00
---( SD )(接通延时定时器线圈指令)用于在RLO 状态出现上升沿时,起动指定的具有给定时间值( <时间值>)的定时器。当<时间值> 已经结束,未出现错误并且RLO 仍为“1”,则该定时器的信号状态为“1”。当定时器运行时,如果RLO 从“1”变为“0”,则定时
器复位。在这种情况下,“1”信号扫描产生结果“0”。
所以使用T0非锁定定时器采集脉冲时,RL0从“1”变为“0”,定时器复位了,所以采集不倒定时器的脉冲。
xietog: 引用 加为好友 发送留言 2006-7-9 12:26:00
把这两行颠倒一下应该就可以了
xietog: 引用 加为好友 发送留言 2006-7-9 12:40:00
我试验了一下颠倒过来就没有问题了。运行完全正常,其实这样的问题在其他类型的PLC里面也是一样的。是一个时序问题。
teamo.wan: 引用 加为好友 发送留言 2006-7-10 8:48:00
这么说,西门子PLC和其他PLC的扫描原理是有所不同的?
阿连: 引用 加为好友 发送留言 2006-7-12 16:58:00
接:TO teamo.wan:你理解错了,这一个周期里,T0的状态是T存储区里立即被复位,而程序里一个周期扫描读值一次.
这就是你为什么要反过来这两行.读值不是立即的,复位却是立即的.
阿连: 引用 加为好友 发送留言 2006-7-12 17:11:00
前一条在执行时,其实你的下一条已经进CPU去排队了.所以~~~~
我的嘴很笨么?呵呵
teamo.wan: 引用 加为好友 发送留言 2006-7-13 13:59:00
TO 阿连:
你的意思是也是:定时器的状态是不断刷新的,所以时间到达时,T0的状态就立即改变??
阿连: 引用 加为好友 发送留言 2006-7-14 9:30:00
对的.
阿连: 引用 加为好友 发送留言 2006-7-14 9:39:00
你分清T0存储区的状态是时间到立即变,而程序里T0的状态是要每次扫程序的时候预读出来的.所以你的实际累加时间是一个扫描周期加上10秒.因为每10秒有一个扫描周期你是累加数据,而没有立即下一个计时.如果不出意外,大部分PLC,CPU都是这个道理的.