跳至内容

Modbus RTU

ADU、CRC、功能码与串口时序。

正在准备工具…

报文结构

Modbus RTU 的 ADU 由从站地址、功能码、数据和 CRC 组成,CRC 在线上低字节在前:

ADU=[addr][fc][data…][CRClo][CRChi] \mathrm{ADU}=[addr][fc][data\ldots][CRC_{lo}][CRC_{hi}]

CRC 使用 CRC-16/MODBUS,初值 FFFF、反射多项式 A001。ASCII 文本 123456789 的校验值为 4B37,线上发送 37 4B。

例:从站 1、功能码 03、起始地址 0、读取 10 个保持寄存器,PDU 为 01 03 00 00 00 0A,ADU 为 01 03 00 00 00 0A C5 CD。

功能码与数量

第一版支持 01、02、03、04、05、06、0F、10。读线圈和离散输入最多 2000 个,读保持/输入寄存器最多 125 个;写多线圈最多 1968 个,写多寄存器最多 123 个。功能码 05 的线圈值只接受 FF00 或 0000,功能码 06 的寄存器值为 0–65535。

地址 0 只用于写功能码广播,从站不返回响应。异常响应把功能码最高位置 1,后接异常码和 CRC。响应解析会核对 CRC、字节数和寄存器/线圈数量。

帧间隔

RTU 帧之间至少需要 3.5 个字符的静默:

t3.5=3.5⋅11b(8E1),t3.5=3.5⋅10b(8N1) t_{3.5}=3.5\cdot\frac{11}{b}\quad(8E1),\qquad t_{3.5}=3.5\cdot\frac{10}{b}\quad(8N1)

高于 19200 baud 时按规范使用固定 1.75 ms。9600 baud、8N1、8 字节请求的字符时间约 1.042 ms,帧时间约 8.333 ms,帧间隔约 3.646 ms。页面按所选串口格式计算字符位数。

边界

地址、数量、写入值和 CRC 都会校验;解析模式要求响应至少包含地址、功能码、数据和 CRC。页面不处理 ASCII 模式、网关路由和 Modbus TCP 的 MBAP 头。