发布于 2017-09-18 17:42:13
1楼
既然1200是客户机,那么它与服务器通讯不上后,就要先尝试改变本地端口然后再跟服务器通讯,或者断开连接再重新连接通讯。
如果一直用原来的端口,妥妥的再也连不上的节奏。
你用TCP/IP抓包软件查看数据包,事务Code是不是一直在递增,不递增说明1200的问题?
Modbus协议是发送--等待接收--接收完成或服务器超时(1分钟或者服务器可设定)--再次发送 这样时序,如果不是这个节奏,服务器就会认为你是ARP攻击直接关闭你的端口。
也可以在3次读取失败后直接断开连接,延迟100ms后再尝试连接。
以上的措施都是以第三方Modbus TCP服务器是达到协议规定范围内的服务器才有效,如果是特殊的就需要跟厂商沟通咯,就比如服务器在发现寄存器数量、地址、功能码等错误后都不反馈错误码,通讯只能缓冲一帧数据,解包字节顺序错误等都有可能导致通讯失败的,然后发现失败了,1200的TCP底层有没有再次发送?我没弄个不得而知。