Modbus RTU协议
参考:https://zhuanlan.zhihu.com/p/38920259
推荐个看到的不错的视频:https://www.bilibili.com/video/BV1Qr4y1M7oE
Modbus通信协议具有多个变种,其具有支持串口(主要是RS-485总线)、以太网。其中最著名三种是:
- Modbus RTU(串口)
- Modbus ASCII(串口)
- Modbus TCP(以太网)
Modbus ASCII 和 Modbus ASCII
其中 Modbus RTU 与 Modbus ASCII 均为支持 RS-485 总线的通信协议,其中 Modbus RTU 由于其采用二进制表现形式以及紧凑数据结构,通信效率较高,应用比较广泛。
而 Modbus ASCII 由于采用 ASCII 码传输,并且利用特殊字符作为其字节的开始与结束标识,其传输效率要远远低于 Modbus RTU 协议,一般只有在通信数据量较小的情况下才考虑使用 Modbus ASCII 通信协议,在工业现场一般都是采用 Modbus RTU 协议,一般而言,大家说的基于串口通信的 Modbus 通信协议都是指 Modbus RTU 通信协议。
Modbus RTU 和 Modbus TCP
在此我们着重讨论 Modbus RTU 协议,而 Modbus TCP 协议则是在 RTU 协议上加一个 MBAP 报文头,由于 TCP 是基于可靠连接的服务,RTU 协议中的 CRC 校验码就不再需要,所以在 Modbus TCP 协议中是没有 CRC 校验码.
用一句比较通俗的话说就是:Modbus TCP 协议就是 Modbus RTU 协议在前面加上五个 0 以及一个 6,然后去掉两个 CRC 校验码字节就 OK。虽然这句话说得不是特别准确,但是也基本上把 RTU 与 TCP 之间的区别说得比较清楚了。
RTU 协议指令内容
RTU 协议中的指令由
- 地址码(一个字节)
- 功能码(一个字节)
- 起始地址(两个字节)
- 数据(N个字节)
- 校验码(两个字节)
五个部分组成,其中数据又由数据长度(2 字节,表示的是寄存器个数为 M)和数据正文(2*M 字节)组成,
RTU 协议是采用 3.5 个字节的空闲时间作为指令的起始和结束,
一般而言,只有当从机返回数据或者主机写操作的时候,才会有数据正文,而其他时候比如主机读操作指令的时候,没有数据正文,只需要数据长度即可。
Modbus RTU Over TCP/IP
看到一个不错的文章:modbus-rtu和modbus-tcp和modbus-rtu-Over-tcp/ip
串口转网口的一个转换模块
它会把串口转为网口,但是数据还是传的 Modbus RTU 的数据,
可以这样理解,相当于外面包了一层 Modbus TCP,但是本质还是 RTU 的数据。

浙公网安备 33010602011771号