1、系统架构
2、代码部分
(1)Modbus/TCP
(2)Modbus/RTU
3、测试
测试过程中,反复断开和连接ADAM-4501与ADAM-4000IO模块之间的通讯导线,*终会发现即使在Modbus/RTU通讯连接时,PC组态软件也无法与ADAM-4501进行Modbus/TCP通讯,虽然PC可以Ping通ADAM-4501,如下图所示:
原因:断开Modbus/RTU通讯时,ADAM-4501读取ADAM-4000模块数据等待时间过长,会导致Modbus/TCP通讯超时,甚至引起Modbus/TCP通讯的Server端和Client端彻底断开
4、解决办法
思路:即使Modbus/RTU通讯断开,也不应该影响到Modbus/TCP通讯。
办法:增加对串口的超时设置,使得ADAM-4501即使读取不到数据,当等待时间超过某个设定值时,立即返回。这样就避免了因读取数据等待时间过长引起的对Modbus/TCP通讯的影响。
调用如下函数,设置串口超时时间:
长时间测试,即使断开ADAM-4501与ADAM-4000IO模块的连接,再未出现PC组态软件与ADAM-4501通讯断开问题。