当前位置: 首页 > news >正文

MODBUS 协议详细解读

地址:MODBUS 协议中文版下载

一、协议定位

MODBUS 是OSI 模型第 7 层(应用层) 的报文传输协议,核心定位是为不同总线 / 网络(串行链路、TCP/IP)连接的设备提供客户机 / 服务器(主站 / 从站)通信能力,是工业自动化领域的 “事实标准”(1979 年起源,支持千万级自动化设备互联)。

核心定位特征

  1. 通信模式:请求 / 应答机制(客户机发起请求,服务器返回响应,无主动推送)。
  2. 网络适配:支持两类底层网络,且均基于国际标准构建:
    • 串行链路:依赖 TIA/EIA-232-F、TIA/EIA-485-A 标准;
    • TCP/IP:依赖 IETF 的 RFC793(TCP)、RFC791(IP),使用保留端口502
  3. 应用场景:工业自动化中 PLC、HMI、I/O 设备、驱动器等的远程数据读写(如读传感器状态、写控制指令)。

二、协议整体结构

MODBUS 协议按 “分层映射 + 数据单元封装” 设计,整体结构分为协议规范框架底层实现指南两大部分,具体如下:

1. 协议规范框架(三部分核心文档)

部分名称核心作用
第一部分Modbus 协议规范定义 MODBUS 事务处理框架、PDU(协议数据单元)、功能码、数据模型
第二部分TCP/IP 上的实现指南提供 TCP/IP 环境下 MODBUS 应用层的映射规则(如 MBAP 头)、连接管理
第三部分串行链路上的实现指南提供串行链路(RS232/485)下的帧结构、传输模式(RTU/ASCII)、物理层参数

2. OSI 模型分层映射

MODBUS 不依赖底层通信层,仅需在对应 OSI 层完成 “协议映射”,具体映射关系如下:

网络类型OSI 层对应内容核心标准 / 组件
串行链路(RS232/485)第 1 层(物理层)电气接口TIA/EIA-232-F、TIA/EIA-485-A(两线制必需,四线制可选)
第 2 层(数据链路层)帧分隔、差错校验主从协议、RTU/ASCII 模式、CRC/LRC 校验
第 7 层(应用层)数据交互逻辑MODBUS PDU(功能码 + 数据)、异常响应
TCP/IP第 1 层(物理层)以太网物理接口IEEE 802.3 以太网物理层
第 2 层(数据链路层)以太网帧以太网 II/802.3 帧格式
第 3 层(网络层)IP 寻址RFC791(IP 协议)
第 4 层(传输层)可靠传输RFC793(TCP 协议,端口 502)
第 7 层(应用层)数据交互逻辑MODBUS ADU(MBAP 头 + PDU)、功能码

3. 数据单元结构

MODBUS 定义两类核心数据单元,PDU(协议数据单元) 为核心逻辑单元,ADU(应用数据单元) 为底层传输单元(PDU + 附加域)。

(1)PDU(协议数据单元)
  • 核心组成功能码(1字节) + 数据域(n字节),与底层无关,仅定义应用层逻辑。
  • PDU 类型
    • 请求 PDU(mb_req_pdu):客户机发送,数据域含地址、数量等参数(如读线圈的起始地址 + 线圈数);
    • 响应 PDU(mb_rsp_pdu):服务器正常响应,数据域含请求结果(如线圈状态);
    • 异常响应 PDU(mb_excep_rsp_pdu):服务器错误响应,功能码 = 原功能码 + 0x80,数据域含异常码(1 字节)。
(2)ADU(应用数据单元)

PDU 需添加底层适配域形成 ADU,不同网络的 ADU 结构不同:

网络类型ADU 结构各域说明长度限制
串行链路(RS232/485)地址域(1 字节) + PDU + 差错校验(2 字节)地址域:从站地址(0 = 广播,1-247 = 从站,248-255 = 保留);差错校验:RTU 用 CRC,ASCII 用 LRC总长度 = 256 字节(PDU=253 字节)
TCP/IPMBAP 头(7 字节) + PDUMBAP 头:事务标识(2 字节,匹配请求响应)、协议标识(2 字节,0x0000=MODBUS)、长度(2 字节,后续字节数)、单元标识(1 字节,路由用)总长度 = 256 字节(PDU=249 字节)

三、关键术语与参数

1. 核心术语定义

术语英文核心定义关键参数 / 规则
协议数据单元PDU应用层核心逻辑单元,与底层无关组成:功能码(1 字节)+ 数据域(n 字节)
应用数据单元ADU底层传输单元,PDU + 附加域串行:地址域 + PDU+CRC/LRC;TCP:MBAP+PDU
MODBUS 协议头MBAPTCP 环境下的 ADU 附加头,用于事务匹配7 字节:事务标识 (2)+ 协议标识 (2,0x0000)+ 长度 (2)+ 单元标识 (1)
循环冗余校验CRCRTU 模式的帧差错校验16 位值,覆盖整个 ADU(地址域 + PDU),低字节先传
纵向冗余校验LRCASCII 模式的帧差错校验8 位值,覆盖除起始 “:” 和结束 “CRLF” 外的帧内容
功能码Function Code指示服务器执行的操作类型范围:1-255(128-255 = 异常响应);分类:公共 / 用户定义 / 保留

2. 核心参数表(分模块)

(1)数据模型参数(4 个基础表格)

MODBUS 定义 4 类数据对象,覆盖工业场景中 “比特 / 字”“只读 / 读写” 需求:

数据表格对象类型访问类型数据长度核心用途寻址范围
离散量输入单个比特只读1bit采集传感器状态(如按钮、传感器)0-65535
线圈单个比特读写1bit控制执行器(如继电器、指示灯)0-65535
输入寄存器16 位字只读16bit采集模拟量(如温度、电流)0-65535
保持寄存器16 位字读写16bit存储控制参数(如设定值、配置参数)0-65535
(2)功能码参数(公共功能码核心示例)

公共功能码为强制支持,保证设备互操作性:

功能码(十进制 / 十六进制)名称操作对象关键限制
01/0x01读线圈线圈一次读 1-2000 个连续线圈
02/0x02读离散量输入离散量输入一次读 1-2000 个连续离散量
03/0x03读保持寄存器保持寄存器一次读 1-125 个连续寄存器
04/0x04读输入寄存器输入寄存器一次读 1-125 个连续寄存器
05/0x05写单个线圈线圈仅写 1 个线圈(0x0000=OFF,0xFF00=ON)
06/0x06写单个寄存器保持寄存器仅写 1 个保持寄存器
15/0x0F写多个线圈线圈一次写 1-1968 个连续线圈
16/0x10写多个寄存器保持寄存器一次写 1-123 个连续寄存器
20/0x14读文件记录保持寄存器一次读 1-10000 个连续寄存器
21/0x15写文件记录输入寄存器一次写 1-10000 个连续寄存器
22/0x16屏蔽写寄存器保持寄存器一次写 1-16 个连续寄存器
43/0x2B读设备识别码设备信息读取厂商名、产品代码等(分基本 / 正常 / 扩展对象)
(3)异常码参数(核心错误类型)

服务器通过 “功能码 + 0x80” 标识异常,数据域含 1 字节异常码:

异常码(十进制)名称核心含义应用场景
01非法功能服务器不支持请求的功能码客户机发送保留功能码
02非法数据地址请求的地址不存在或超出范围读线圈起始地址 + 数量超出设备最大地址
03非法数据值请求的参数值无效写线圈时数据非 0x0000/0xFF00
04从站设备故障服务器执行操作时内部故障寄存器读写时硬件错误
06从站设备忙服务器正在处理长任务执行复杂配置时的临时忙状态
(4)物理层与传输参数
参数类别核心参数要求 / 范围支撑场景
串行链路接口电气接口必需:RS485 两线制;可选:RS485 四线制、RS232RS485 支撑多点通信(32 台设备无中继),RS232 支撑点对点(<20m)
波特率速率必需:9600bps;推荐:19200bps;可选:1200/2400/4800 等9600bps 为基础速率,19200bps 提升传输效率
传输模式帧格式必需:RTU 模式;可选:ASCII 模式RTU:高数据密度(8 位字节),用 3.5 字符空闲分隔帧;ASCII:易调试(2 字符 / 字节),用 “:” 和 “CRLF” 分隔
校验方式字符校验必需:偶校验;可选:奇校验、无校验(需 2 个停止位)偶校验减少串行链路字符传输错误
帧校验帧完整性RTU 用 CRC(16 位);ASCII 用 LRC(8 位)确保帧在传输中未被篡改或丢失
(5)实现等级参数

MODBUS 串行链路设备分 “基本级” 和 “常规级”,确保不同设备互操作性:

实现等级寻址广播传输模式波特率校验电气接口
基本级从站 1-247(可配置)支持仅 RTU9600(19200 可选)仅偶校验RS485 两线制 / RS232
常规级同基本级支持RTU+ASCII(可配置)9600/19200 + 可选速率偶校验 + 可选奇 / 无校验RS485 两线制(四线制可选)/RS232

四、协议关键流程

MODBUS 协议的核心流程围绕 “底层传输适配 + 应用层事务处理” 展开,需结合串行链路(RS232/485)与 TCP/IP 两种底层网络,分别拆解通信、事务处理、数据传输三大核心流程。

(一)通信流程原理:主从 / 客户机 - 服务器双模式

1. 串行链路:主从通信流程(依赖 TIA/EIA-485/232 标准)

串行链路采用单主多从机制,总线中仅 1 个主站发起请求,从站仅响应自身地址的请求,流程如下:

  1. 主站初始化:主站进入 “空闲” 状态(电源上电后初始状态),仅在此状态可发起请求;
  2. 请求发送
    • 单播模式:主站向指定从站地址(1-247)发送 ADU(地址域 + PDU+CRC/LRC),随后进入 “等待应答” 状态,启动 “响应超时” 定时器(需覆盖从站处理 + 传输延迟,9600bps 时通常 1 - 几秒);
    • 广播模式:主站向地址 0 发送请求(仅支持写操作),无需等待应答,发送后进入 “等待转换延迟” 状态(100-200ms,确保从站完成处理);
  3. 从站响应
    • 从站持续监听总线,仅接收地址匹配(或广播地址 0)的帧,检测到帧后校验 CRC/LRC(RTU/ASCII 模式);
    • 若帧合法且能处理,单播从站返回 ADU(自身地址 + 响应 PDU+CRC/LRC),广播从站无响应;
    • 若帧错误(如 CRC 不匹配、地址不匹配),从站不返回任何响应;
  4. 主站处理
    • 单播:主站收到应答后校验,无错则处理数据,有错则重试(重试次数可配置);若超时无应答,判定为从站故障或传输错误;
    • 广播:主站等待转换延迟后回到 “空闲” 状态,可发起新请求。
2. TCP/IP:客户机 - 服务器通信流程(依赖 IETF RFC793/791)

TCP/IP 采用客户机主动发起、服务器侦听机制,基于端口 502 建立连接,流程如下(图 7/9:、):

  1. 服务器初始化:服务器在 TCP 502 端口持续侦听,支持 “优先连接库”(绑定特定 IP,不主动关闭)和 “非优先连接库”(超限时关闭最早空闲连接);
  2. 连接建立
    • 客户机向服务器 IP:502 发起 TCP 连接,本地端口 > 1024 且唯一;
    • 服务器校验客户机 IP(访问控制模块:白名单 IP 允许连接,未配置 IP 默认禁止),若连接数未超上限(通常 1-16,依设备能力),则建立连接;
  3. 事务并行处理
    • 客户机可在同一连接上并发发送多个请求(通过 MBAP 头 “事务标识” 区分),无需等待前一响应;
    • 服务器接收请求后,按 “事务标识” 独立处理,生成响应后通过原连接返回;
  4. 连接关闭
    • 通信结束后客户机主动关闭连接;若连接空闲超 “保持连接” 计时器(默认 2 小时),服务器发送试探帧,8 次无响应则关闭连接()。

(二)事务处理流程:请求 - 响应 / 异常响应机制

MODBUS 事务处理的核心是 “PDU 交互”,分为正常响应和异常响应两类,流程如下:

1. 正常事务处理(无差错)
  1. 客户机 / 主站构造请求 PDU:PDU = 功能码(1 字节)+ 请求数据(如读线圈的 “起始地址 + 线圈数量”),串行链路添加 “地址域 + CRC/LRC” 形成 ADU,TCP 添加 “MBAP 头” 形成 ADU;
  2. 服务器 / 从站处理请求
    • 校验 ADU 合法性(如地址、CRC/LRC、功能码支持性);
    • 执行功能码对应的操作(如读线圈状态、写寄存器值);
  3. 服务器 / 从站构造响应 PDU:响应 PDU = 原功能码(1 字节)+ 响应数据(如线圈状态、寄存器值),封装为 ADU 后返回;
  4. 客户机 / 主站处理响应:校验响应 ADU(如 MBAP 事务标识匹配、CRC/LRC 正确),提取数据并反馈给应用层。
2. 异常事务处理(含差错)

当服务器 / 从站无法处理请求(如非法功能码、地址超出范围),触发异常响应:

  1. 异常检测:服务器在 “功能码校验”“地址校验”“数据校验”“操作执行” 任一环节检测错误(图 10/11:、);
  2. 异常响应 PDU 构造:异常 PDU=(原功能码 + 0x80)(1 字节)+ 异常码(1 字节),如 “读线圈功能码 01” 错误时,功能码变为 0x81,异常码 02 表示 “非法数据地址”;
  3. 客户机 / 主站错误处理:识别功能码最高位为 1(异常标识),通过异常码定位错误原因(如 01 = 非法功能、03 = 非法数据值),避免盲目重试。

(三)数据传输流程:三种模式的帧处理逻辑

MODBUS 根据底层网络差异,定义 RTU(串行)、ASCII(串行)、TCP 三种数据传输模式,核心是 “帧边界识别 + 差错校验”。

1. RTU 模式(串行链路必需,默认模式:)
  • 帧结构:地址域(1 字节)+ 功能码(1 字节)+ 数据域(0-252 字节)+CRC(2 字节,低字节先传),总长度≤256 字节;
  • 帧分隔:通过 “空闲时间” 区分帧 —— 帧起始前需≥3.5 个字符空闲(t3.5),帧内字符间隔≤1.5 个字符空闲(t1.5);波特率 > 19200bps 时,t3.5 固定为 1.75ms,t1.5 固定为 750μs;
  • 校验逻辑:CRC 覆盖 “地址域 + 功能码 + 数据域”,发送端预装 CRC 寄存器为 0xFFFF,逐字节异或后移位计算,接收端重新计算并对比。
2. ASCII 模式(串行链路可选)
  • 帧结构:起始符 “:”(1 字节)+ 地址域(2 字符)+ 功能码(2 字符)+ 数据域(0-504 字符)+LRC(2 字符)+ 结束符 “CRLF”(2 字节),总长度≤513 字符;
  • 帧分隔:通过特殊字符 ——“:” 标识帧起始,“CRLF” 标识帧结束,字符间隔≤1 秒;
  • 校验逻辑:LRC 覆盖 “地址域 + 功能码 + 数据域”(不含 “:” 和 “CRLF”),计算方式为 “字节累加→取反→加 1”,接收端重新计算并对比。
3. TCP 模式
  • 帧结构:MBAP 头(7 字节)+PDU(功能码 + 数据),总长度≤256 字节();MBAP 头各域含义:事务标识(2 字节,匹配请求响应)、协议标识(2 字节,0x0000=MODBUS)、长度(2 字节,= 单元标识 1 字节 + PDU 长度)、单元标识(1 字节,路由用,直连 TCP 设备用 0xFF);
  • 帧分隔:TCP 为字节流,通过 MBAP 头 “长度域” 确定 PDU 结束位置(如长度 = 6,表示后续 6 字节 = 单元标识 1 字节 + PDU 5 字节);
  • 校验逻辑:依赖 TCP 的 ACK 重传机制(传输层),无需额外帧校验(以太网 CRC-32 已覆盖链路层)。

五、协议详细配置方法

MODBUS 配置需按 “底层网络(串行 / TCP)→数据链路层→应用层” 分层操作,核心是确保 “设备参数一致 + 互操作性”,具体配置项及方法如下:

(一)串行链路配置(RS232/485,对应文档第二部分)

1. 物理层配置(关键影响通信稳定性)
配置项配置要求配置方法
电气接口必需:RS485 两线制;可选:RS485 四线制、RS232- RS485 两线制:D0(A 线)、D1(B 线)+ 公共地,主干两端加 150Ω 终端电阻(匹配阻抗,减少反射);- RS485 四线制:TXD0/TXD1(发送对)、RXD0/RXD1(接收对)+ 公共地,每对两端加终端电阻;- RS232:仅点对点(<20m),TXD 接对方 RXD,RXD 接对方 TXD,公共地共地
波特率必需:9600bps;推荐:19200bps;可选:1200/2400/4800/38400bps 等所有设备波特率需一致;波特率精度:发送端≥1%,接收端允许 ±2% 误差
字符格式数据位:RTU=8 位,ASCII=7 位;校验位:必需偶校验,可选奇校验 / 无校验(无校验需 2 个停止位);停止位:1 位(有校验)/2 位(无校验)通过设备配置工具(如 HMI、串口工具)设置,所有设备字符格式需一致
线路偏置若设备需稳定空闲状态,在 D1 线加 450-650Ω 上拉电阻(至 5V),D0 线加 450-650Ω 下拉电阻(至公共地)仅在主站或网关处配置 1 组偏置电阻,避免多设备重复偏置导致总线过载;偏置后最大设备数减少 4 台
电缆必需屏蔽双绞线;RS485 两线制需 1 对平衡线 + 1 根公共地,4 线制需 2 对平衡线 + 1 根公共地;推荐线径:AWG24(1000m)、CAT5(600m)电缆屏蔽层两端接保护地;避免与强电电缆并行敷设;分支电缆≤20m(多分支时≤40m/n,n 为分支数)
2. 数据链路层配置(影响帧传输正确性)
配置项配置要求配置方法
传输模式必需:RTU;可选:ASCII通过设备拨码或软件设置,同一总线所有设备模式需一致;默认优先 RTU(数据密度高)
从站地址主站无地址;从站地址:1-247(唯一),0 为广播地址禁止同一总线重复地址(会导致总线瘫痪);通过设备手册的 “地址配置” 章节设置(如拨码、串口指令)
超时参数响应超时(主站):需≥从站处理时间 + 传输时间(9600bps 时建议 1-3 秒);转换延迟(主站广播后):100-200ms主站配置工具中设置 “响应超时时间” 和 “广播延迟时间”


(二)TCP/IP 配置(对应文档第三部分)

1. 网络层配置(确保 TCP 连接建立)
配置项配置要求配置方法
IP 地址 / 子网掩码IP 地址:A/B/C 类合法地址;子网掩码:与 IP 地址类型匹配(如 C 类默认 255.255.255.0)通过设备 Web 界面、串口工具或 DHCP 服务器分配;禁止 0.0.0.0 或广播地址
默认网关与本地 IP 同子网;无网关时设为 127.0.0.1 或本地 IP若设备跨网段通信,需配置网关 IP(如 192.168.1.1)
2. 传输层配置(优化 TCP 连接稳定性)
配置项配置要求配置方法
端口号默认:502(必需侦听);可选:自定义端口(需客户机 / 服务器一致)设备配置工具中设置 “MODBUS TCP 端口”;即使自定义端口,502 端口需保持可用(互操作性要求)
TCP 参数- TCP_NODELAY:启用(禁用 NAGLE 算法,减少小报文延迟);- SO_KEEPALIVE:启用(空闲 2 小时后发送试探帧,8 次无响应关闭连接);- SO_REUSEADDR:启用(允许端口在 2MSL 时间内复用)通过操作系统或设备驱动配置 TCP 选项;嵌入式设备需厂商提供 “TCP 参数配置” 接口
连接管理推荐:自动连接(对应用透明),保持连接不频繁断开;连接数:客户机≤16,服务器≤16(依设备能力)客户机配置 “自动重连”;服务器配置 “优先连接 IP 列表”(不主动关闭关键设备连接)
3. 应用层配置(确保 PDU 正确交互)
配置项配置要求配置方法
MBAP 头参数- 事务标识:客户机按递增赋值(匹配请求响应);- 单元标识:直连 TCP 设备用 0xFF,网关路由用从站地址(1-247)客户机程序中生成事务标识(如从 1 开始递增);网关配置 “单元标识 - 从站地址” 映射
超时参数事务超时:≥网络延迟 + 服务器处理时间(局域网建议 100-500ms,广域网建议 1-3 秒)客户机配置 “事务超时时间”,超时后重试(重试次数≤3 次,避免网络拥塞)

(三)设备一致性配置(必做检查项)

  1. 参数一致性:同一网络内所有设备的 “传输模式(RTU/ASCII)、波特率、校验位、数据位、停止位(串行)”“端口号、MBAP 单元标识(TCP)” 必须一致;
  2. 地址唯一性:串行链路从站地址、TCP 设备 IP 地址必须唯一;
  3. 功能码兼容性:客户机发送的功能码需在服务器支持列表内(公共功能码默认兼容,用户功能码需提前确认);
  4. 线路检查:串行链路需测通 D0/D1 / 公共地,无短路 / 断路;TCP 链路需 ping 通设备 IP,502 端口可访问(telnet IP 502 测试)。

    六、通信帧设计

    (一)核心概念:PDU 与 ADU 的关系

    • PDU(协议数据单元):应用层核心逻辑单元,与底层网络无关,统一结构为功能码(1字节)+ 数据域(n字节),用于定义 “操作类型 + 操作参数 / 结果”(如 “读线圈” 功能码 01+“起始地址 + 线圈数量”)。
    • ADU(应用数据单元):底层传输单元,由 PDU 附加 “地址域 / MBAP 头”“差错校验域” 构成,适配不同传输模式的帧分隔与校验需求。

    (二)串行链路通信帧设计(RTU/ASCII 模式,对应文档第二部分)

    串行链路依赖 “地址域 + 帧校验” 实现多点通信,分 RTU(默认必需)和 ASCII(可选)两种模式,帧结构需适配串行链路的 “无帧边界” 特性(通过空闲时间或特殊字符分隔)。

    1. RTU 模式帧设计(高效紧凑,主流工业场景)

    RTU 模式以 “字节流 + CRC 校验” 为核心,数据密度高,适合工业现场高干扰环境,帧结构与关键规则如下:

    (1)帧结构(总长度≤256 字节)
    域名称长度取值范围 / 作用
    地址域1 字节0(广播地址,无响应)、1-247(从站地址,唯一)、248-255(保留)
    PDU253 字节(最大)功能码(1 字节,1-255)+ 数据域(0-252 字节,如起始地址、数量、数据)
    CRC 校验域2 字节覆盖 “地址域 + PDU” 的 16 位循环冗余校验值,低字节先传输
    (2)关键设计规则
    • 帧分隔机制:通过 “空闲时间” 区分帧 —— 帧起始前需≥3.5 个字符时间(t3.5),帧内字符间隔≤1.5 个字符时间(t1.5);波特率 > 19200bps 时,t3.5 固定为 1.75ms,t1.5 固定为 750μs(避免高速传输时计时误差)、。
    • CRC 计算逻辑:预装 16 位寄存器为 0xFFFF,逐字节与寄存器低字节异或后右移 1 位,若 LSB 为 1 则与多项式 0xA001 异或,重复 8 次 / 字节,最终结果低字节先传(如 CRC 值 0x1241,传输顺序为 0x41→0x12)、。
    • 示例:请求 “读从站 1 的线圈 20-38(起始地址 0x0013,数量 0x0013)” 的 RTU 帧(十六进制):01 01 00 13 00 13 CD 6B,其中 “01” 为从站地址,“01” 为功能码,“00 13 00 13” 为数据域,“CD 6B” 为 CRC。
    2. ASCII 模式帧设计(易调试,低干扰场景)

    ASCII 模式以 “字符编码 + LRC 校验” 为核心,每个字节用 2 个 ASCII 字符表示,易人工读取,帧结构与关键规则如下:

    (1)帧结构(总长度≤513 字符)
    域名称长度取值范围 / 作用
    起始符1 字符“:”(ASCII 0x3A),标识帧起始
    地址域2 字符十六进制 00-FF(对应十进制 0-255,含义同 RTU)
    功能码2 字符十六进制 01-FF(对应十进制 1-255,含义同 RTU)
    数据域0-504 字符十六进制编码,每个字节对应 2 个字符(如数据 0x12 表示为 “12”)
    LRC 校验域2 字符覆盖 “地址域 + 功能码 + 数据域” 的 8 位纵向冗余校验值,ASCII 编码
    结束符2 字符“CRLF”(ASCII 0x0D+0x0A),标识帧结束
    (2)关键设计规则
    • 帧分隔机制:通过 “起始符:” 和 “结束符 CRLF” 明确帧边界,字符间隔≤1 秒(超过则判定为帧错误)。
    • LRC 计算逻辑:对 “地址域 + 功能码 + 数据域” 的字节累加(忽略进位),取二进制补码(累加值→取反→加 1),结果用 2 个 ASCII 字符表示(如 LRC 值 0x61,编码为 “61”)、。
    • 示例:请求 “读从站 1 的线圈 20-38” 的 ASCII 帧(字符)::0101001300139C\r\n,其中 “:” 为起始符,“01” 为从站地址,“01” 为功能码,“00130013” 为数据域,“9C” 为 LRC,“\r\n” 为结束符。

    (三)TCP/IP 通信帧设计(MBAP 头 + PDU,跨网络场景)

    TCP/IP 模式依赖 “MBAP 头(MODBUS 协议头)” 实现事务匹配与路由,适配 TCP 的 “字节流” 特性,帧结构与关键规则如下(对应文档第三部分):

    1. 帧结构(总长度≤256 字节)
    域名称长度取值范围 / 作用
    MBAP 头7 字节含事务标识、协议标识、长度、单元标识,用于事务匹配与路由
    PDU249 字节(最大)与串行链路一致:功能码(1 字节)+ 数据域(0-248 字节)
    2. MBAP 头各域详解(核心适配 TCP 特性)
    MBAP 子域长度取值 / 作用客户机 / 服务器职责
    事务标识2 字节0x0000-0xFFFF,唯一标识单个事务(匹配请求与响应)客户机生成(递增),服务器复制请求值返回
    协议标识2 字节0x0000(仅 MODBUS 协议),用于多路复用客户机设为 0x0000,服务器复制返回
    长度2 字节后续字节数(= 单元标识 1 字节 + PDU 长度)客户机计算请求长度,服务器计算响应长度
    单元标识1 字节0xFF(直连 TCP 设备)、1-247(串行链路从站地址,网关路由用)客户机按需设置,服务器复制返回
    3. 关键设计规则
    • 帧定位机制:TCP 无帧边界,通过 MBAP 头 “长度域” 确定 PDU 结束位置(如长度 = 6,表示后续 6 字节 = 单元标识 1 字节 + PDU 5 字节)。
    • 端口与传输:所有帧通过 TCP 502 端口传输(保留端口,必需侦听),自定义端口需确保客户机 / 服务器一致,且 502 端口需保持可用(互操作性要求)、。
    • 示例:请求 “读寄存器 108-110(起始地址 0x006B,数量 0x0003)” 的 TCP 帧(十六进制):00 01 00 00 00 06 FF 03 00 6B 00 03,其中 “00 01” 为事务标识,“00 00” 为协议标识,“00 06” 为长度(=1+5),“FF” 为单元标识,“03 00 6B 00 03” 为 PDU、。

    (四)异常响应帧设计(统一格式,跨模式兼容)

    当服务器 / 从站无法处理请求时,返回异常响应帧,核心是 “功能码最高位设 1 + 异常码”,格式跨 RTU/ASCII/TCP 统一:

    1. 异常响应 PDU 结构
    域名称长度取值 / 作用
    异常功能码1 字节原功能码 + 0x80(如原功能码 01→0x81)
    异常码1 字节01(非法功能)、02(非法数据地址)、03(非法数据值)、04(从站故障)等
    2. 示例(RTU 模式)

    请求 “读从站 1 的非法地址线圈”,异常响应帧(十六进制):01 81 02 F8 3A,其中 “01” 为从站地址,“81” 为异常功能码(01+0x80),“02” 为异常码(非法数据地址),“F8 3A” 为 CRC。

    七、协议使用注意事项

    基于文档规范,MODBUS 协议使用需重点关注 “参数一致性、物理部署、通信交互、故障规避” 四大类注意事项,确保落地稳定性与互操作性:

    (一)参数一致性注意事项(核心前提)

    1. 串行链路参数必须统一:所有设备的 “波特率、传输模式(RTU/ASCII)、校验位、数据位、停止位” 必须完全一致,否则帧无法解析(如 RTU 设备接收 ASCII 帧会判定为 CRC 错误);
    2. TCP/IP 参数匹配:客户机与服务器的 “端口号(默认 502)、MBAP 头协议标识(必须为 0x0000)” 必须一致,否则服务器拒绝连接或丢弃请求;
    3. 功能码兼容性:客户机发送的功能码必须在服务器支持列表内(公共功能码默认兼容,用户功能码需提前确认),避免发送保留功能码(如 24-64)。

    (二)物理部署注意事项(串行链路关键)

    1. RS485 线路部署
      • 终端电阻:仅在主干电缆两端加 150Ω 终端电阻,分支电缆禁止加(避免信号反射);
      • 线路偏置:仅在主站或网关处加 1 组偏置电阻(D1 上拉 450-650Ω 至 5V,D0 下拉 450-650Ω 至地),禁止多设备重复偏置(导致总线过载);
      • 电缆选型:必需使用屏蔽双绞线,AWG24 及以上线径(1000m 传输),避免与强电电缆并行敷设(间距≥30cm);
    2. RS232 距离限制:通信距离≤20m,超过需改用 RS485(加中继可延长至 4000m);
    3. 接地规范:公共地需单端接地(如主站侧),避免两端接地产生地环流(干扰信号)。

    (三)通信交互注意事项

    1. 地址唯一性
      • 串行链路从站地址 1-247 必须唯一,禁止重复(会导致总线冲突,主站无法通信);
      • TCP/IP 设备 IP 地址必须唯一,避免 IP 冲突导致连接失败;
    2. 帧完整性
      • RTU 模式:帧内字符间隔≤1.5 个字符时间,帧间间隔≥3.5 个字符时间(波特率 > 19200bps 时固定为 750μs/1.75ms),否则帧被丢弃;
      • ASCII 模式:帧必须以 “:” 起始、“CRLF” 结束,字符间隔≤1 秒;
    3. 超时与重试
      • 主站 / 客户机需设置合理超时(串行响应超时 1-3 秒,TCP 事务超时 100-500ms),避免过短导致误判、过长影响效率;
      • 重试次数≤3 次(避免网络拥塞),重试间隔≥响应超时时间;
    4. 广播限制:仅支持写操作(如功能码 05/15),禁止广播读操作(无响应导致主站超时)。

    (四)故障规避与异常处理注意事项

    1. 校验机制启用
      • 串行链路必须启用 CRC(RTU)或 LRC(ASCII)校验,禁止关闭(避免传输错误未被检测);
      • TCP 模式依赖 TCP 重传,无需额外帧校验,但需启用 SO_KEEPALIVE(检测断连);
    2. 异常码解读:收到异常响应后,需按异常码排查(如 01 = 非法功能码→检查功能码是否支持,02 = 非法地址→检查地址范围),禁止盲目重试;
    3. 数据编码:多字节数据(如 16 位寄存器)采用 Big-Endian 编码(先传 MSB),禁止小端序(导致数据解析错误,如 0x1234 传为 0x3412);
    4. 连接管理(TCP)
      • 避免频繁断开 / 建立连接(推荐保持连接),减少 TCP “时间等待” 状态(启用 SO_REUSEADDR);
      • 服务器连接数不超过上限(1-16),优先保障关键设备连接(配置 “优先连接 IP 列表”)。

    八、MODBUS 与同类工业协议的原理及使用差异

    工业自动化领域常见同类协议包括 Profinet(西门子)、EtherNet/IP(罗克韦尔)、DeviceNet(ODVA),MODBUS 与它们的差异核心在于 “分层架构、通信机制、适用场景”,以下基于文档中 MODBUS 的核心特性展开对比:

    (一)原理差异(核心是 “轻量性 vs 实时性 / 复杂性”)

    对比维度MODBUSProfinetEtherNet/IPDeviceNet
    OSI 分层映射仅定义第 7 层(应用层),依赖底层网络(串行链路第 1-2 层、TCP/IP 第 1-4 层),无自定义中间层(、)全分层:第 1 层(以太网物理层)、第 2 层(实时以太网帧)、第 7 层(Profinet 应用层),自定义 “实时通道”(IRT)优化时延基于 CIP 协议:第 1-4 层(TCP/IP 或 UDP/IP)、第 7 层(CIP 应用层),CIP 定义对象模型和服务基于 CAN 总线:第 1 层(CAN 物理层)、第 2 层(CAN 数据链路层)、第 7 层(DeviceNet 应用层),依赖 CAN 的 ID 优先级
    通信机制请求 - 应答(主从 / TCP 客户机 - 服务器),无主动推送;串行链路单主,TCP 支持多客户机并发(、)混合机制:周期传输(实时数据,如 I/O)+ 非周期传输(非实时数据,如配置),支持 “生产者 - 消费者”(设备主动推送数据)生产者 - 消费者机制:设备按 “对象 ID” 推送数据,订阅者接收,无需请求;支持 TCP(可靠)和 UDP(实时)主从 + 生产者 - 消费者:主站管理总线,从站可主动推送事件数据(如故障报警)
    数据单元PDU(功能码 + 数据)+ADU(底层附加域),结构简单,无对象封装(、)实时帧(RT_FRAME)+ 标准以太网帧,实时帧含 “实时标识”,数据按 “过程对象” 封装CIP 对象:数据封装为 “属性 - 服务” 对象(如 “温度传感器对象” 含 “当前值” 属性),服务对应操作对象模型:数据按 “设备对象”“装配对象” 封装,支持 “显性报文”(配置)和 “隐性报文”(实时 I/O)
    差错控制多层校验:字符级(奇偶校验)、帧级(CRC/LRC)、应用级(异常响应)(、)链路层(以太网 CRC-32)+ 应用层(实时帧校验和),支持 “冗余连接”(双网备份)传输层(TCP 重传)+ 应用层(CIP 校验),支持 “设备健康状态监测”CAN 数据链路层(CRC-15)+ 应用层(报文校验),支持 “总线错误计数”

    (二)使用差异(核心是 “通用性 vs 场景适配性”)

    对比维度MODBUSProfinetEtherNet/IPDeviceNet
    适用场景中低速、非实时工业场景:如传感器数据采集(温度、压力)、PLC 与 HMI 通信、小型控制系统高速、实时场景:如运动控制(机器人、数控机床)、大型生产线(时延≤1ms)中高速、灵活场景:如过程控制(化工、冶金)、混合控制系统(支持 TCP/UDP 切换)低速、低成本场景:如传感器、执行器分布式连接(汽车生产线、物流设备)
    互操作性极高:公共功能码(01/03/05 等)全球统一,无厂商壁垒,任何支持 MODBUS 的设备可直接通信较高:需符合 Profinet 一致性测试,但依赖西门子生态(如硬件芯片、配置工具)较高:需符合 ODVA 认证,支持多厂商设备,但 CIP 对象配置较复杂较高:需符合 ODVA 认证,CAN 总线成本低,但传输距离短(≤500m)
    复杂度极低:帧结构简单(无复杂对象封装),开发难度低(仅需实现 PDU/ADU 解析),适合中小厂商高:需实现实时帧调度、IRT 协议,依赖专用芯片(如西门子 PN 芯片),开发周期长中:需实现 CIP 对象模型和服务,配置工具(如 RSLogix)较复杂中:需熟悉 CAN 总线特性,设备地址和报文 ID 配置需按规范
    传输性能串行:9600-19200bps,1000m(RS485);TCP:100Mbps(以太网),时延≥10ms(非实时)100Mbps/1Gbps(以太网),实时时延≤1ms(IRT),周期传输最小周期 125μs100Mbps/1Gbps(以太网),实时时延≤10ms(UDP),非实时时延≥100ms(TCP)125/250/500kbps(CAN),传输距离≤500m(500kbps 时≤100m)
    成本极低:串行链路(RS485 芯片成本 < 1 美元),TCP 设备无额外硬件成本,无需授权费高:专用芯片(如 PN-IRT 芯片)成本高,需支付 Profinet 联盟认证费中:需支付 ODVA 认证费,无专用芯片,但配置工具(如罗克韦尔软件)需付费低:CAN 芯片成本低(<2 美元),无需认证费,但总线节点数有限(≤64)

    (三)MODBUS 的核心优势与局限性

    1. 核心优势(文档支撑的特性)
    • 通用性:支持串行 / TCP 两种底层网络,公共功能码统一,全球千万级设备兼容;
    • 轻量性:帧结构简单,开发难度低,适合资源受限设备(如 8 位 MCU 传感器);
    • 灵活性:支持用户定义功能码(65-72、100-110),可扩展自定义需求(如设备专用配置指令)();
    • 低成本:串行链路无需复杂硬件,TCP 无需专用芯片,无授权或认证费用(、)。
    2. 局限性(对比同类协议的短板)
    • 实时性差:依赖请求 - 应答机制,无周期传输或主动推送,无法满足运动控制等低时延场景;
    • 功能单一:仅支持数据读写,无冗余、安全(如加密)、故障诊断等高级功能(同类协议如 Profinet 支持双网冗余);
    • 串行链路瓶颈:单主机制限制并发,RS485 无中继仅支持 32 台设备,传输速率低(≤38400bps)。
    http://www.dtcms.com/a/412421.html

    相关文章:

  • Unity避坑——继承了MonoBehaviour的对象不能通过new来创建
  • 网站和网页wordpress修改邮件模板
  • 必应网站建设开源企业网站源码
  • 官方网站的资料做证据百度seo优化招聘
  • VSCode+MSVC+Qmake环境搭建笔记
  • 公司做网站选择哪个公司好数据库网站建设教程
  • 430亿美元押注英国,Salesforce 加码 AI 投资
  • 「React实战面试题」:状态批量更新的经典陷阱
  • RSA非对称加密算法
  • app的网站域名注册网站开发费用是研发费用
  • 网站开发公司怎么查网页设计尺寸厘米
  • 教人做家务的网站企业铭做网站
  • 凡科网做网站电脑网站安全证书有问题如何解决
  • seo网站推广排名广州网络营销运营
  • 网站需要实名认证查企业电话软件哪个好
  • STM32CubeMX、X-CUBE-AI、Keil5 安装
  • 广州建设网站企业兰亭集势网站模板
  • 临沂广润网站建设做视频网站成本高吗
  • 今年北斗GNSS变形监测系统与单北斗设备对比大坝监测推荐榜单
  • VBA 处理 Adobe Acrobat 文档:从文本搜索到交互式链接
  • 【读书笔记】深入理解JVM C12 内存模型与线程
  • 手机建站程序莱芜都市网app
  • 好的ppt模板免费下载网站舟山市建设工程质量监督站网站
  • 网站 内容建设存在的问题asp.net商务网站开发
  • 做网站需要用什么系统10岁一12岁的创意手工
  • 人文经济学与人工智能融合发展研究:现状、影响与趋势
  • Gin框架整合Swagger生成接口文档完整指南
  • 织梦图片网站ppt模板免费下载百度云
  • 【JAVA】深入解析Java String类:原理与常用方法
  • h1z1注册网站公路机电工程建设网站