Modbus协议中的功能码 0x03 和 0x10详细讲解(超详细)原创

💌 所属专栏:【Modbus协议】
😀 作  者:兰舟比特 🐾
🚀 个人简介:热爱开源系统与嵌入式技术,专注 Linux、网络通信、编程技巧、面试总结与软件工具分享,持续输出实用干货!
💡 欢迎大家:这里是兰舟比特的技术小站,喜欢的话请点赞、收藏、评论三连击!有问题欢迎留言交流😘😘😘


Modbus协议中,功能码 0x030x10(即16进制的10,十进制为16) 是两种常用的功能码,分别用于:

  • 0x03 (Read Holding Registers):从机读取保持寄存器。
  • 0x10 (Write Multiple Registers):主机向从机写入多个保持寄存器。

下面分别介绍这两种功能码在 Modbus RTU 或 TCP 模式下主从通信时的报文格式。


一、Modbus 报文通用结构

一个 Modbus 报文通常由以下部分组成:

字段描述
从机地址 (Slave Address)1字节,表示目标从站的地址(0~255)
功能码 (Function Code)1字节,表示要执行的操作
数据域 (Data)N字节,根据功能码不同而变化
CRC校验 (RTU模式) / 无 (TCP模式)2字节,CRC-16 校验值

在 Modbus TCP 中,前缀是 MBAP 头部,包含事务标识、协议标识、长度等信息。


二、功能码 0x03:读保持寄存器(Read Holding Registers)

1. 主机请求报文格式(请求从机发送数据)

字段内容长度(Byte)
从站地址Slave Address1
功能码0x031
起始地址 High要读取的第一个寄存器地址高位1
起始地址 Low地址低位1
寄存器数量 High要读取的寄存器个数高位1
寄存器数量 Low个数低位1
CRC校验(RTU)或无(TCP)CRC162
示例(RTU模式):

读从站地址为 0x01 的设备,起始地址为 0x0000,读取 0x0002 个寄存器:

01 03 00 00 00 02 CRCL CRCH

2. 从机响应报文格式(返回数据)

字段内容长度(Byte)
从站地址Slave Address1
功能码0x031
字节数返回的数据总字节数1
数据各寄存器的值(每个寄存器占2字节)N=2*寄存器数
CRC校验(RTU)或无(TCP)CRC162
示例(RTU模式):

从机返回两个寄存器的值:0x1234, 0x5678

01 03 04 12 34 56 78 CRCL CRCH

三、功能码 0x10:写多个保持寄存器(Write Multiple Registers)

1. 主机请求报文格式(写入多个寄存器)

字段内容长度(Byte)
从站地址Slave Address1
功能码0x101
起始地址 High写入的第一个寄存器地址高位1
起始地址 Low地址低位1
寄存器数量 High要写入的寄存器个数高位1
寄存器数量 Low个数低位1
字节数实际写入数据的字节数(=2*N)1
数据要写入的数据(每个寄存器占2字节)2*N
CRC校验(RTU)或无(TCP)CRC162
示例(RTU模式):

向从站地址为 0x01 的设备,写入两个寄存器,起始地址为 0x0000,数据为 0x1234, 0x5678

01 10 00 00 00 02 04 12 34 56 78 CRCL CRCH

2. 从机响应报文格式(确认写入成功)

从机收到写入命令后,返回确认信息。响应报文中不包含实际数据内容,只确认写入范围。

字段内容长度(Byte)
从站地址Slave Address1
功能码0x101
起始地址 High确认写入的起始地址高位1
起始地址 Low地址低位1
寄存器数量 High确认写入的寄存器个数高位1
寄存器数量 Low个数低位1
CRC校验(RTU)或无(TCP)CRC162
示例(RTU模式):

确认从地址 0x0000 开始写入了 0x0002 个寄存器

01 10 00 00 00 02 CRCL CRCH

四、总结对比表

功能码名称请求方向响应是否含数据数据格式说明
0x03Read Holding Registers主机 → 从机返回寄存器数值
0x10Write Multiple Registers主机 → 从机仅确认写入成功

五、注意事项

  • 所有地址和寄存器编号都是 0-based(从0开始计数)。
  • 每个寄存器占 2字节(16位)
  • CRC 校验使用 CRC-16/MODBUS 算法。
  • 在 Modbus TCP 中,报文前面加一个 7 字节的 MBAP 头部,不带 CRC。

版权声明:

本文为 兰舟比特 原创内容,如需转载,请注明出处及作者,禁止未经授权的引用或商用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兰舟比特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值