文章详情
所在位置: 首页> 技术文章> 其它>

单片机开发线路板设计中使用的Modbus-RTU常用功能码通信数据

日期:2024-04-19 09:20
浏览次数:897
摘要:单片机开发及线路板设计中使用的Modbus-RTU常用功能码通信数据 单片机主板读取数据及返回指令分析 设备地址码(1BYTE) 功能码(1BYTE) 寄存器首地址高字节(1BYTE) 寄存器首地址低字节(1BYTE) 寄存器个数高字节(1BYTE) 寄存器个数低字节(1BYTE) CRC校验高字节(1BYTE) CRC校验低字节(1BYTE) ...


一,主机读数据(功能码:0X03)

1,主机发送命令格式

设备地址码(1BYTE)

功能码(1BYTE)

寄存器首地址高字节(1BYTE)

寄存器首地址低字节(1BYTE)

寄存器个数高字节(1BYTE)

寄存器个数低字节(1BYTE)

CRC校验高字节(1BYTE)

CRC校验低字节(1BYTE)

 

 2,从机返回命令格式

设备地址(1BYTE)

功能码(1BYTE)

有效数据个数高字节

有效数据个数低字节

有效数据

1

高字节

有效数据

1

低字节

有效数据

n

高字节

有效数据

n

低字节

CRC校验高字节

CRC校验低字节

 

 

例:主机要读取01号设备的0X0000,0X0001,0X0002,0X0003四个寄存器中的数据:

主机发送:

设备地址码(1BYTE)

功能码(1BYTE)

寄存器首地址高字节(1BYTE)

寄存器首地址低字节(1BYTE)

寄存器个数高字节(1BYTE)

寄存器个数低字节(1BYTE)

CRC校验高字节(1BYTE)

CRC校验低字节(1BYTE)

01

03

00

00

00

04

44

09

  

从机返回

寄存器0x0000中的数据(0x0004)

寄存器0x0001中的数据(0x0005)

寄存器0x0002中的数据(0x0001)

寄存器0x0003中的数据(0x0002)

 

0x01 0x03 0x08 0x00 0x04 0x00 0x05 0x00 0x01 0x00 0x02 0xcc 0x16

 

 一, 主机写(修改从机)数据(功能码:0X06)

1,主机发送命令格式

设备地址码(1BYTE)

功能码(1BYTE)

寄存器地址高字节(1BYTE)

寄存器地址低字节(1BYTE)

寄存器值高字节(1BYTE)

寄存器值低字节(1BYTE)

CRC校验高字节(1BYTE)

CRC校验低字节(1BYTE)

 

 2,从机返回命令格式

设备地址码(1BYTE)

功能码(1BYTE)

寄存器地址高字节(1BYTE)

寄存器地址低字节(1BYTE)

寄存器值高字节(1BYTE)

寄存器值低字节(1BYTE)

CRC校验高字节(1BYTE)

CRC校验低字节(1BYTE)

  

例:主机要修改01号设备的0X0000寄存器,将寄存器中的值改为0x0008:

主机发送:

设备地址码(1BYTE)

功能码(1BYTE)

寄存器地址高字节(1BYTE)

寄存器地址低字节(1BYTE)

寄存器值高字节(1BYTE)

寄存器值低字节(1BYTE)

CRC校验高字节(1BYTE)

CRC校验低字节(1BYTE)

01

06

00

00

00

08

88

0C

  

从机返回:

设备地址码(1BYTE)

功能码(1BYTE)

寄存器地址高字节(1BYTE)

寄存器地址低字节(1BYTE)

寄存器值高字节(1BYTE)

寄存器值低字节(1BYTE)

CRC校验高字节(1BYTE)

CRC校验低字节(1BYTE)

01

06

00

00

00

08

88

0C

 

 10 写多个保持寄存器

      上位机发送数据格式

“:”ADDRESS Ox10 ADDRH ADDRL NUMH NUML BYTECOUNT DATAHI DATALI DATA2H DATA2L------DATANH DATANL LRC OXOD OXOA

注:ADDR:    0----OXFFFF; NUM:0-125 (NUM为要写的保持寄存器的数量)

正确时变频器返回数据格式

“:”   ADDRESS Ox10 ADDRH ADDRL NUMH NUML LRC OXOD OXOA

 

二. 功能码 10写连续地址寄存器

例:主机要修改01号设备的0X1200寄存器,将寄存器中的值改为连续前3个地址改为0xff00:

主机发送:

设备地址码(1BYTE)

功能码(1BYTE)

寄存器地址高字节(1BYTE)

寄存器地址低字节(1BYTE)

连续写个数

高字节(1BYTE)

连续写个数

低字节(1BYTE)

发送的数据总数(1BYTE)

数据1高字节(1BYTE)

数据1低字节(1BYTE)

数据2高字节(1BYTE)

数据2低字节(1BYTE)

数据3高字节(1BYTE)

数据3低字节(1BYTE)

CRC校验高字节(1BYTE)

CRC校验低字节(1BYTE)

01

10

00

00

00

03

06

ff

00

ff

00

ff

00

DC

13

 

 

从机返回:

设备地址码(1BYTE)

功能码(1BYTE)

寄存器地址高字节(1BYTE)

寄存器地址低字节(1BYTE)

连续写个数

高字节(1BYTE)

连续写个数

低字节(1BYTE)

CRC校验高字节(1BYTE)

CRC校验低字节(1BYTE)

01

10

12

00

00

03

85

70