点表是地图,功能码是动作。第 2 章结束时小周已经知道 40001 是温度、偏移 0——但他还没见过"读"这个动作在线上长什么样。本章跟着小周第一次手工组报文的经历走:拆开 PDU 骨架(3.1),把八条常用功能码逐条实战一遍(3.2),再处理"设备答不上来"的异常与沉默(3.3)。三站走完,你手里就有了一套能独立收发 Modbus 报文的完整手艺。
本章的认知拐点:报文的每个字节都"有账可算"。地址、功能码、起始偏移、数量、字节数——每一段都能对着规范与点表逐字节解释,没有玄学。第二个拐点:异常是消息,沉默也是消息。设备回异常码是在说"你的请求哪里不对"(02 是地址、03 是数值),设备沉默则要按物理层到配置层逐层查。会读异常、会查沉默,排障就算入了门。
问:八条常用功能码要背吗? 至少要能"看着点表选对"。规律其实好记:位用 01/02/05/15,字用 03/04/06/16;01/03 读、02/04 读(只读区)、05/06 写单、15/16 写多。
问:设备返回异常码说明什么? 它在告诉你请求哪里不对:01 功能码不支持、02 地址非法、03 数值非法。先看异常码再改程序,比盲试快得多。
问:设备完全沉默怎么查? 按"物理层→地址→CRC→配置"四层查:先抓包确认请求发出了,再算 CRC、对地址、核对波特率与配置。
本章的骨架是:PDU(功能码+数据)→ 八条功能码实战 → 异常与沉默。PDU 是报文的解剖结构;八条功能码是"动作库";异常与沉默是"设备的反馈"。把三者串起来,你就能完整地"发出一条请求并读懂任何回应"。
配套练习建议:用 Modbus Poll 连一台从站模拟器,把八条功能码各执行一遍并观察回显与异常;再故意制造地址越界,观察异常码 02 的行为。
报文的手艺有了,下一章把同一套 PDU 搬到三种传输载体上:RTU 用二进制加 CRC、ASCII 用可见字符加 LRC、TCP 用 MBAP 头。你会发现 PDU 不变、变的是外面的"包装"——这是 Modbus 跨载体通用的架构精髓。
