Modbus Application Protocol Specification(V1.1b3)是定位于Modbus 应用层标准,只规定第 7 层 PDU,独立于 RS485、TCP 等底层传输。统一规定跨传输链路的 Modbus 请求 / 应答语义、数据寻址方式、功能码与错误响应,保证不同厂商设备互通。
国内等同国标:GB/T 19582.1-2008《基于 Modbus 协议的工业自动化网络规范 第 1 部分:Modbus 应用协议》,2008-09-01实施,代替GB/Z 19582.1-2004。
一、通信模型
采用 客户端 / 服务器(Client/Server) 请求 - 应答模型(原主从 Master/Slave)。
1. 客户端:发起请求。
2. 服务器:接收请求、执行操作、返回应答。
3. 规则:服务器不能主动发送数据,必须由客户端轮询。
二、核心报文单元:PDU(协议数据单元)
1.PDU = 功能码(1字节) + 数据域(N字节)。
2.PDU 是通用载荷,Modbus RTU / ASCII / TCP 共用。
3.ADU(应用数据单元)= 传输层头部 + PDU + 校验(不同链路格式不同)。
4. RTU:从站地址 + PDU + CRC
5.TCP:MBAP 头 (7字节) + PDU
三、四种标准数据模型(协议最核心)
重点:报文中地址为0 起始;设备手册常标注 1 起始,程序要 - 1。
1. 线圈 Coils:1bit,读写(开关输出)。
2. 离散输入 Discrete Inputs:1bit,只读(开关输入)。
3. 保持寄存器 Holding Registers:16bit,读写(参数、设定值)。
4. 输入寄存器 Input Registers:16bit,只读(采集模拟量)。
四、标准功能码(公共功能码)
1. 读取类:01,读线圈; 02,读离散输入; 03,读保持寄存器; 04,读输入寄存器。
2. 写入类:05,写单个线圈; 06,写单个保持寄存器; 15 (0x0F),写多个线圈; 16 (0x10),写多个保持寄存器。
3. 复合功能:23 (0x17),同时读写保持寄存器。
4. 异常应答规则:原功能码 + 0x80,后跟 1 字节异常码。
五、标准异常码(Exception Code)
Modbus 标准异常码为 1 字节数值(0x01-0x0B),位于异常响应帧数据域;异常响应特征为功能码最高位置 1(原码 +0x80)。
核心标准异常码列表:
0x01 非法功能:从站不支持请求的功能码或处于未配置状态无法执行该操作 。
0x02 非法数据地址:请求的寄存器地址不存在、超出范围或对该类型地址不可访问(最常见)。
0x03 非法数据值:请求中的数据值(如写入值)超出从站允许范围或格式错误。
0x04 从站设备故障:从站处理请求时发生不可恢复的内部错误。
0x05 确认:从站已接收长时操作命令(如编程),正在处理中,主站需稍后轮询确认 。
0x06 从站忙:从站正处理长时任务,暂时无法接受新请求,主站应稍后重试 。
0x08 存储奇偶校验错误:扩展文件区读取时检测到内存/存储奇偶校验失败(特定功能码使用)。
0x0A 网关路径不可用:网关配置错误或过载,无法分配内部通信路径(仅网关模式)。
0x0B 网关目标设备响应失败:网关未收到目标从站的响应(仅网关模式)。
六、数据编码强制规则
1. 16 位数值:大端模式 Big-Endian(高字节在前)
2. 线圈状态:ON=0xFF00,OFF=0x0000,禁止其他值
3. 协议未定义 32 位整数、浮点数;高低字节组合属于厂商自定义实现
七、报文长度约束
1. 最大 PDU 长度253字节: 功能码(1字节) + 数据域(252字节)
2. Modbus RTU/ASCII最大ADU 256字节:1字节地址码+253字节PDU+2字节CRC或LRC。
3. Modbus TCP最大长度ADU 260字节:7字节MBAP+253字节PDU。
八、功能码分区
1. 01-64:标准公共功能码
2. 65-72、100~110:厂商预留自定义
3. 128-255:专门用于异常响应
九、文件边界
本应用协议规范不包含:
1. RS485 时序、CRC/LRC 校验(串行链路规范)
2. Modbus TCP MBAP 头部、502 端口(TCP 实现指南)

