MODBUS-RTU协议¶
1 协议概述¶
MODBUS-RTU(国标GB/T19582-2008)通讯协议进行通讯,支持一主站控制多个从站,通过自带的上位机可以配置 247个从站地址(0为广播地址,1-247为单播地址),主站可以是单片机、PLC或PC机等。
2 通信参数¶
出厂时的串口默认配置,波特率默认为 115200bps,数据位 8,无校验,停止位 1;波特率可配置范围 4800~256k0bps,驱动器默认通信地址(站号)为1。
3 modbus-rtu帧格式¶
本驱动器支持 modbus的0x03(读保持寄存器)、0x06(写单个寄存器)、0x10(写多个寄存器),0x83(异常码),异常码支持0x01(操作码错误)与0x02(地址错误)。
3.1 读保持寄存器 0x03¶
主站发送:
| 字节 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 内容 | 从站地址 | 0x03 | 寄存器地址高位 | 寄存器地址低位 | 读数据长度高位 | 读数据长度低位 | CRC高位 | CRC低位 |
第1字节从站地址:从站地址码(1~247) 第2字节0x03: 读寄存器值功能码 第3、4字节:读取寄存器的开始地址 第5、6字节:读数据长度 第7、8字节:字节1到6的CRC16校验和
从站正常应答:
| 字节 | 1 | 2 | 3 | 4、5 | 6、7 | n-1、n | n+1 | n+2 | |
|---|---|---|---|---|---|---|---|---|---|
| 内容 | 从站地址 | 0x03 | 寄存器字节总数 | 寄存器数据1 | 寄存器数据2 | …… | 寄存器数据m | CRC高位 | CRC低位 |
第1字节从站地址:从站地址码(1~247) 第2字节0x03: 读寄存器值功能码 第3字节:从4到n(包括4及n)的寄存器字节总数 第4~n字节:读取的m个寄存器数据,其中m=(n-3)/2, n-1为高位字节,n为低位字节 第n+1、n+2字节:字节1到n的CRC16 校验和
从站异常应答:
| 字节 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 内容 | 从站地址 | 0x83 | 0x02 | CRC高位 | CRC低位 |
3.2 写单个寄存器 0x06¶
主站发送:
| 字节 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 内容 | 从站地址 | 0x06 | 寄存器地址高位 | 寄存器地址低位 | 寄存器数据高位 | 寄存器字节数低位 | CRC高位 | CRC低位 |
第1字节从站地址:从站地址码(1~247) 第2字节0x06: 写单个寄存器功能码 第3、4字节:写寄存器的地址 第5、6字节:写寄存器数据 第7、8字节:字节1到6的CRC16 校验和
从站正常应答:
| 字节 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 内容 | 从站地址 | 0x06 | 寄存器地址高位 | 寄存器地址低位 | 寄存器数据高位 | 寄存器字节数低位 | CRC高位 | CRC低位 |
从站异常应答:
| 字节 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 内容 | 从站地址 | 0x86 | 异常码 | CRC高位 | CRC低位 |
异常码:0x02表示主站请求地址非法,0x03表示请求数据非法
3.3 写多个寄存器 0x10¶
主站发送:
| 字节 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8、9 | 10、11 | n-1、n | n+1 | n+2 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 内容 | 从站地址 | 0x10 | 寄存器地址高位 | 寄存器地址低位 | 寄存器长度高位 | 寄存器长度低位 | 寄存器字节总数 | 寄存器数据1 | 寄存器数据2 | … | 寄存器数据m | CRC高位 | CRC低位 |
第1字节从站地址:从站地址码(1~247) 第2字节0x03: 应答读功能码 第3、4字节:写入寄存器地址,3为高位字节,4为低位字节 第5、6字节:写入寄存器的长度m 第7字节:从8到n(包括8及n)的字节总数 第8~n字节:写入的m个寄存器数据,其中m=(n-7)/2,n-1为高位字节,n为低位字节 第n+1、n+2字节:字节1到n的 CRC16校验和
从站正常应答:
| 字节 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 内容 | 从站地址 | 0x10 | 寄存器地址高位 | 寄存器地址低位 | 寄存器长度高位 | 寄存器长度低位值 | CRC高位 | CRC低位 |
第1字节从站地址:从站地址码(1~247) 第2字节0x10:写多个寄存器功能码 第3、4字节:写寄存器的地址 第5、6字节:写寄存器长度 第7、8字节:字节1到6的CRC16校验和
从站异常应答:
| 字节 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 内容 | 从站地址 | 0x90 | 异常码 | CRC高位 | CRC低位 |
异常码:0x02表示主站请求地址非法,0x03表示请求数据非法
3.4 查询总线从机设备ID 0x11¶
主站发送:
| 字节 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| 内容 | 从站地址 | 0x11 | CRC高位 | CRC低位 |
第1字节从站地址:从站地址码(1~247),ID 总线上只接一个从设备允许使用0广播ID查询 第2字节0x11: 功能码 第3、4字节:字节1到3的 CRC16校验和
从站正常应答:
| 字节 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 内容 | 从站地址 | 0x17 | 3 | 从站地址 | 状态码高位 | 状态码低位 | CRC高位 | CRC低位 |
第1字节从站地址:从站地址码(1~247) 第2字节0x11: 功能码 第3字节:返回有效字节数 第4字节:从站地址码(1~247) 第6、7字节:状态码 第8、9字节:字节1到6的CRC16校验和
3.5 重启指定ID从机设备 0x41¶
主站发送:
| 字节 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| 内容 | 从站地址 | 0x41 | CRC高位 | CRC低位 |
第1字节从站地址:从站地址码(1~247),使用0为广播ID可重启总线上所有从设备 第2字节0x41: 功能码 第3、4字节:字节1到3的 CRC16校验和