ModBus通信协议的【Modbus RTU 协议使用汇总】

时间:2023-03-08 17:54:35
ModBus通信协议的【Modbus RTU 协议使用汇总】

1、RTU模式

当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两
个4Bit的十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的
数据。
代码系统
· 8位二进制,十六进制数0...9,A...F 
· 消息中的每个8位域都是一个两个十六进制字符组成
每个字节的位
· 1个起始位
· 8个数据位,最小的有效位先发送
· 1个奇偶校验位,无校验则无
· 1个停止位(有校验时),2个Bit(无校验时)
错误检测域
· CRC(循环冗长检测)

2、RTU帧

使用RTU模式,消息发送至少要以3.5个字符时间的停顿间隔开始。在网络波特率下多样的字符时间,这是最容易实现的(如下图的T1-T2-T3-T4所示)。传输的第一个域是设备地址。可以使用的传输字符是十六进制的0...9,A...F。网络设备不断侦测网络总线,包括停顿间隔时间内。当第一个域(地址域)接收到,每个设备都进行解码以判断是否发往自己的。在最后一个传输字符之后,一个至少3.5个字符时间的停顿标定了消息的结束。一个新的消息可在此停顿后开始。整个消息帧必须作为一连续的流转输。如果在帧完成之前有超过1.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个新消息在小于3.5个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续。这将导致一个错误,因为在最后的CRC域的值不可能是正确的。一典型的消息帧如下所示:

ModBus通信协议的【Modbus RTU 协议使用汇总】

ModBus通信协议的【Modbus RTU 协议使用汇总】

3、Modbus RTU协议格式

请求和响应带有六个字节的前缀,如下:
      byte 0:     设备地址
      byte 1:     功能码
      byte 2:     寄存器地址
      byte 3:     寄存器地址
      byte 4:     数据长度
      byte 5:     数据长度
      byte 6:     CRC校验
      byte 7:     CRC校验

      ModBus通信协议的【Modbus RTU 协议使用汇总】

      ModBus通信协议的【Modbus RTU 协议使用汇总】

4、常用的功能码

0x01 读取 输出 继电器的状态

       ModBus通信协议的【Modbus RTU 协议使用汇总】

      ModBus通信协议的【Modbus RTU 协议使用汇总】

0x02 读取 输入 继电器的状态

      ModBus通信协议的【Modbus RTU 协议使用汇总】

0x03 读多个寄存器

      ModBus通信协议的【Modbus RTU 协议使用汇总】

0x05 写单个输出继电器的状态

      ModBus通信协议的【Modbus RTU 协议使用汇总】

0x0F 写多个输出继电器的状态

      ModBus通信协议的【Modbus RTU 协议使用汇总】

0x10 写多个寄存器

      ModBus通信协议的【Modbus RTU 协议使用汇总】

5、举例:Modbus-RTU读取温湿度仪表

      ModBus通信协议的【Modbus RTU 协议使用汇总】