展开查看
以下是引用link_wxm在2015-03-18 10:19:52的发言 >1楼:用完成位做轮训是不够的(应该用完成+错误位);
如果数据干扰、错误呢?完成位怎么触发下一个读写呢?
版主还是没有认真的看完modbus通讯的说明;
还有问题:
你都是完成位触发且没有掉站说明没有数据错误,那何来的8200(端口忙于处理发送请求),不合理啊!
你加延时触发就解决了8200(端口忙于处理发送请求),这不符合原理;
加比较没有必要,既然轮训了那就跟PLC的扫描周期一样,数据变化就更新不是更方便吗?
版主应该在程序上下点功夫好好检查你的程序;
完成位在错误时也是可以的,DONE位并不是说只有通讯正常时才置1,它在通讯错误达到唤醒次数限制时也同样置1的,西门子默认的唤醒次数是3次,但是可以修改成1次,对于只有三五个从站的话,设置成50~100ms的延时完全不受影响,只有从站多的时候需要给个控制优先级,一般情况下完全没有问题!