本节摘要:诊断 Modbus 问题的工具链分三层:串口层(串口助手、Modbus 调试器)、网络层(Wireshark)、综合层(现场诊断仪)。本节讲清每类工具的能力边界与使用时机,并给出一套"抓包→解析→定位"的标准动作。位置:第 7 章把链路和安全都讲完,本章是收官的实战章节。
| 工具 | 层 | 用途 | 时机 |
|---|---|---|---|
| 串口助手(SSCOM 等) | 串口 | 手工收发原始字节、看 CRC | 验证物理链路、单帧收发 |
| Modbus 调试器(Poll/Slave) | 应用 | 图形化读写寄存器、模拟主/从站 | 验证点表、批量开发前的单点验证 |
| Wireshark | 网络 | Modbus TCP 报文解析、流分析 | TCP 链路问题、跨网关问题 |
| 现场诊断仪 | 综合 | 总线波形、CRC 错误统计、在线抓包 | 疑难杂症的最终手段 |
使用时机口诀:先在应用层验证点表(Poll 能读写吗)→ 能则问题在上位机程序,不能则往下钻(Wireshark 看 TCP → 串口助手看 RTU → 示波器看物理层)。
Wireshark 对 Modbus TCP 有完整解析:过滤器 modbus 只显示 Modbus 流量;点开一条报文能看到 MBAP 头各字段与 PDU 的逐字段解析(功能码、寄存器地址、数据值)。三个常用排查动作:过滤会话(ip.addr == 网关IP && modbus 看某网关的全部流量);看事务匹配(请求与响应靠事务号配对,未配对的响应 = 有丢包或网关异常);导出原始字节(frame contains "03 00" 之类的字节级过滤,用于与串口侧报文对照)。
串口是共享介质,抓包要"挂线旁听"而不是"接在中间":用支持监听模式的串口工具或硬件分线器,把抓包口并联在 A/B 线上(高阻监听,不影响通信)。抓到原始字节后:先按静默间隔切帧(4.1 的 3.5 字符规则),再逐帧算 CRC 验证——CRC 错的帧说明物理层有问题,CRC 对的帧说明问题在应用层或地址配置。这一步能把"物理层问题"与"应用层问题"一刀切开。
某项目报"上位机偶尔读不到 5 号电表"。工具链排障:Wireshark 看 TCP 流量正常(请求有、响应无)→ 网关日志确认 5 号转发的串口帧已发出 → 串口抓包看 5 号从站无响应且 5 号地址无冲突 → 示波器量 5 号端口的 A/B 波形,发现该段线缆屏蔽层断裂导致信号衰减。结论:四层工具各切一刀,问题定位到物理层线缆。
要点回顾:三层工具各管一段——应用层用 Poll、TCP 用 Wireshark、串口用监听抓包、物理层用示波器;先应用层后往下钻;串口抓包先切帧再算 CRC。工具备齐,下一节把排障方法论固化成流程。
串口助手(SSCOM、友善串口助手等)是手工验证物理链路的利器,但要注意它的三个局限:不做 CRC——你发的字节要自己算好 CRC 拼进帧里;不做时序——连发时没有静默间隔控制,可能粘帧;不做解析——收到的是原始字节,要自己切帧看。正确用法:验证"从站是否在听"(发一条手工拼好 CRC 的读请求看有无响应)、验证波特率与接线(能收到乱码说明链路通但配置不对)。别用它做应用层验证——那是 Modbus 调试器的活。
Modbus 调试器(如 Modbus Poll 作为主站、Modbus Slave 作为从站模拟器)是开发利器:Poll 当主站——验证设备点表(能读到的寄存器、地址、数据),比写代码快得多;Slave 当从站——模拟设备给上位机程序调试用(上位机还没接真设备时用 Slave 顶替),还能故意配置异常行为(地址越界、忙响应)测试上位机的异常处理。开发顺序建议:先 Poll 验证设备 → 再写主站代码连真设备 → 异常路径用 Slave 模拟测试。
Wireshark 看 Modbus TCP 的三个进阶技巧:1 追踪流(右键报文 → Follow TCP Stream,看某个连接的全部字节流,检查是否有多请求并发错乱);2 统计(Statistics → Protocol Hierarchy 看 Modbus 占比,判断是否有非业务流量混入);3 导出(把抓包导出成 CSV,用脚本做长时间统计——事务成功率、平均时延、超时分布,这些数据是性能优化的依据)。
问:串口助手能当主站用吗? 只能做手工验证,不能当主站:它不做 CRC、不做时序、不做解析。应用层验证用 Modbus Poll,串口助手只验物理链路。
问:Wireshark 能抓串口吗? 不能直接抓,Wireshark 解析网络包。串口抓包要用支持监听模式的串口工具或硬件分线器,高阻并联不影响通信。
问:现场没有电脑怎么抓包? 用带抓包功能的手持式总线诊断仪,或预置抓包网关(长时间记录串口/TCP 流量,事后导出分析)。