详细信息: 我正在处理通过TCP / IP设备连接到Modbus的问题。我们需要每秒4-6次轮询一部分设备modbus寄存器。我们记录了以下时间。在控制测试中,我们能够以下列速度进行通信:
控制设备:每 0.0015s 一次,标准差 0.0001s 。
每 0.5200s 发出一次设备,标准差 0.01s 。
经过数周的故障排除和数据包捕获后,我们将问题范围缩小到我们正在与之通信的设备未发出或响应TCP握手数据包这一事实。然而,仍然可以进行通信,因为在发出TCP请求之后查询仍然在0.3200秒后继续进行,并且随后被忽略。此外,问题设备不支持UDP。
数据包捕获故障照片[1]:https://i.stack.imgur.com/lCEos.png
第一个(顶部)数据包是控件,第二个(底部)数据包是问题
问题: 忽略TCP的基本作用是握手的事实,是否有办法减少或完全缓解Windows 7机器上的Intel NIC上的TCP握手。
答案 0 :(得分:0)
问题是PLC请求的缓冲区大小。我们与TCP / IP Modbus服务器软件的开发人员(与PLC制造商相同)进行了联系,发现默认请求的缓冲区大小为2GB,这对于我们正在与之通信的Modbus设备来说太多了。我们有一个新版本的TCP / IP Modbus服务器,它具有可配置的缓冲区大小,并且在10ms内进行通信。