各位大侠,我现在在做一个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呀
因此,我想以减少对不存在站点的访问次数的方法来提高扫描速度,如果有其他方法请指教,谢谢
最佳答案
楼上说得非常详细,但是有点没有说明白,S7-200做主站访问从站的时候,如果超时响应,将会发生请求报文3次,一个从站的访问时间将是 3*Timeout;通讯超时时的发送请求报文的重试次数可以修改,通过修改符号表中mmodbusRetries变量即可修改,默认值为2.
提问者对于答案的评价:
之前只是对主站指令学会了使用,但明显不够深入,没有注意到这个参数可以设置。设置后效果是明显的。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc300549.html