S7-200与多台变频器 Modbus_RTU
主站通讯超时处理的问题【工控老鬼】
问题:
S200与多台变频器 Modbus_RTU 主站通讯,超时处理的问题。
各位大侠,我现在在做一个S200通过Modbus RTU主站协议与多台变频器通讯的小实验,于是连接了一台变频器模拟测试。结果发现因为找不到其他站,数据传输很慢,读写指令要4-5s才能传过去。
现在通讯是没有问题,做单台程序测试很快,只是程序里加了几个点后发现慢了很多,终端电阻已经设好。分析应该是程序搜索不存在的地址,造成通讯超时所致。但我试了很长时间也没有找到一个有效的方法来优化程序,请大家帮助一下,希望可以实现:当存在某台变频器掉线时,可以自动屏蔽对它的周期性访问,但5s左右还要再尝试与这台变频器的通讯,以便在故障恢复时加上这个站。谢谢!!!
问题补充:
谢谢wb210xa的热情回答:
我利用上一条(a)modbus_msg的Done位做为下一条指令(b)的En和First触发,同时复位a的En和Done位,如此循环。按此计算,Timeout=100ms,读写共计10条指令,应该循环时间为100*10=1s。也不应该到4-5s呀,因此,我想以减少对不存在站点的访问次数的方法来提高扫描速度,如果有其他方法请指教,谢谢!
问题分析和解答:
其实比较简单,就是设置合适的超时时间。比如楼主要读取10台变频器,超时时间假如为1s,正常时可能100ms即有数据返回。
1)如果通讯正常时,10台变频的轮询时间为10*100=1s(我只考虑读取状态信息,如果同时读写时时间可能更长,当然和读写数据量有关)。
2)同样情况下,如果有5台变频通讯故障时,总的轮询时间为:5*100+5*1000=5500ms。
而如果超时时间设为150ms时:
1)正常通讯时,10台变频的轮询时间为10*100=1s
2)而同样情况下,如果有5台变频通讯故障时,总的轮询时间为:5*100+5*150=1250ms。
因此,设置正确的通讯超时时间对整个网络轮询很重要。
楼主提到的5s后重发的问题根本不需要考虑,因为程序不停的再执行。因为掉线出现中断后不要去重试,等下一个循环回来后还会给这台变频器重发指令,因此,此时如果该变频器恢复了,因此可以正确读取数据。
解答的补充:
1)您的100ms是否合适要根据读写数据量大概计算一下,如果通讯速率是9600时,每传输1个字节数据时间为1.04ms,因此总的时间为:
(13+n+m)*1.04ms,其中n为读/写的数据长度,m为变频器的数据准备时间。上述时间当然还要加20ms的余量。
如果变频器型号等不同时,变频器数据准备时间有所不同。因此,如果再有通讯中断现象的话,有可能会出现通讯达到4~5秒的现象。
2)您提到的“减少对不存在站点的访问次数的方法来提高扫描速度”的方法的前提是检测出来站点不存在时才可以实现,而如果检测不存在或中断,又是以超时时间来判断的,因此,楼主根本没必要做这些工作;
3)楼主可以用串口调试工具抓一下报文,也可以发现问题,比如是变频器中断还是变频器数据准备时间过长或者不稳定等问题发生。
最后感谢工控老鬼的好资料,大家一起分享
文章打赏
打赏给楼主
积分打赏
现金打赏
积分
友情提示:打赏的积分将从您的工控网积分账号扣除
赏