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 的数据。

posted @ 2021-08-31 15:05  ioufev  阅读(1488)  评论(0)    收藏  举报