如图,用时间触发扫描轮询从站,如下图设置时间没事,当把timeout时间设置更小200,每个功能块的轮询设置到0.5s,即t102=10,T102=15,T=20时轮询就不行了,这是什么原因
图片说明:
最佳答案
知其理,用其妙,方能够得心应手的应用。
首先解释管脚含义:
timeout时间:如果你是默认状态,那么这个时间(mS)是当主站发出数据请求,从站响应,假设主站发出数据请求从站没有响应,这时,主站再发送一次数据请求,从站仍然不响应,主站再做最后一次(默认是3次)数据请求,从站不响应,这时的总时间超出timeout时间设置的时间,则启动报警。
把每一个MSG指令的间隔时间设置为0.5S(500mS),看起来足够了,但是,实际情况没有你想像的那么简单。首先是定时器的刷新机制,时基大于10mS的定时器刷新均为异步,你可以理解这个定时时间宽度是不确定的,对,没有错,每一个定时循环周期是不能够确定的,而你设置的轮询周期为10、15、20时,相当于轮询周期调整为1S、1.5S、2S的周期,而timeout时间设置200mS,有驳于通讯参数之间的匹配。相对应该是timeout时间大于轮询周期,正如我开始讲到的主站发送3次(默认值),从站无响应才会报警那样,timeout时间必须大于轮询周期时间。
仍然再说定时器轮询发送,一般不可取,容易丢失数据,尤其是轮询周期匹配不合理时,无论主站是否能够接收到数据,定时时间一旦到达,MSG必须忘下轮询,这样丢失数据的概率就大很多了。建议重新调整用done和error位来做轮询依据,即指令完成位或指令故障状态值为非0时作为轮询依据,能够规避你的一系列问题。
提问者对于答案的评价:
好好好
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc348160.html