Modbus RTU Over TCP 协议
我们知道 Modbus RTU 和 Modbus TCP,但是这个 Modbus RTU Over TCP 是什么东西?
它其实是一种非官方实现的协议,一句话概括就是:
通过 TCP 层传输 RTU 格式帧
使用场景
其实这种场景也挺常见的,多数用于企业内的旧 Modbus 设备需要联网进行数据采集或监控,由于旧设备不支持联网(不支持 Modbus TCP 协议),那么就需要有一种中间服务器能中转我们的 RTU 帧
任何问题都可以通过增加一个中间层来解决,如果不行,就再加一层 😂
原理
中间服务器通过 RS-485 总线连接多个 Modbus 设备,中间服务器(主机)与设备(从机)之间使用 Modbus RTU 通信
我们的采集系统通过 TCP 连接中间服务器,向它发送 RTU 帧,中间服务器需要做的就是帮我们把这个 RTU 帧转发给对应的从机,拿到数据后在响应给我们
[采集系统] --->(TCP/IP)---> [中间服务器] --->(RS-485)---> [多个 Modbus RTU 设备]
注意事项
- 请求/响应报文严格按照 Modbus RTU 帧来解析,没有 Modbus TCP 的 MBAP 头
- 虽然 TCP 协议有数据可靠性,但是一般中间服务器会直接将从机返回给它的数据返回给你, 从机通过 Modbus RTU 传输给中间服务器这个步骤中可能出现数据损坏,所以你拿到数据后必须通过 CRC 校验码验证数据
- 你需要注意频率,因为中间服务器与 Modbus 设备通信的过程仍有时序问题
- 请求同一个中间服务器,你应该避免使用异步/多线程请求,不然可能出现串帧问题(即可能出现连续请求时 第 1 次请求返回第 2 次请求的数据给你)
