3、Modbus通信测试实战:使用Modbus Poll/Slave工具进行点对点测试、常见故障排查(超时、CRC校验错误、地址不匹配)、抓包分析(Wireshark过滤Modbus TCP报文)

好,咱们进入实战环节。前面讲了那么多理论,说实话,不亲手敲几下键盘、抓几个包,那些知识都是飘着的。这一章,我带你用最趁手的工具——Modbus Poll和Modbus Slave,把通信链路彻底打通。

我个人习惯,调试之前先把工具准备好。Modbus Poll当主站,Modbus Slave当从站。这两个工具,说白了就是一对好基友。一个发命令,一个回响应。你想想看,如果连点对点都调不通,那后面接真实设备肯定抓瞎。

3.1 点对点测试:主站与从站握手

先打开Modbus Slave。我一般这么配:

  • 选择协议:RTU Over TCP(或者直接选TCP/IP,看你的场景)
  • 设置从站地址:比如1
  • 功能码:03(读保持寄存器)
  • 起始地址:0
  • 寄存器数量:10

然后点OK。你会看到一片空白的数据区。别慌,手动填几个值进去,比如地址0填100,地址1填200。这样待会儿主站读回来,你能一眼看出对不对。

再打开Modbus Poll。配置主站:

  • 从站地址:1(必须和Slave一致)
  • 功能码:03
  • 起始地址:0
  • 寄存器数量:10
  • 波特率/端口:根据你的连接方式选。如果是TCP,填IP和端口(默认502)

点击连接。如果一切正常,你会看到数据刷刷刷地显示出来。地址0显示100,地址1显示200。嗯,这就通了。

核心要点:主站和从站的参数必须完全匹配。地址、功能码、起始地址、数量,一个都不能错。我见过太多人栽在地址不匹配上。

3.2 常见故障排查:超时、CRC校验错误、地址不匹配

调试过程中,不出点问题反而不正常。我把自己踩过的坑给你列出来。

3.2.1 超时(Timeout)

现象:主站发完请求,等半天没响应,最后报超时。

原因分析:

  • 物理连接不通。网线没插好,或者串口线接错了。
  • 从站没开机,或者程序没跑起来。
  • 波特率不匹配。RTU模式下,主站设9600,从站设19200,那肯定超时。
  • 响应时间设置太短。Modbus Poll里有个“Response Timeout”参数,默认1000ms。如果从站处理慢,可以适当调大。

我的习惯:遇到超时,先ping一下IP地址。如果ping不通,别查协议了,先查网线。如果ping得通,再看端口502通不通。用telnet测一下,一测一个准。

3.2.2 CRC校验错误

现象:主站收到响应,但报CRC错误。数据看起来是乱的。

原因分析:

  • 串口通信时,数据位、停止位、校验位设置不一致。比如主站设8N1,从站设8E1,CRC必错。
  • 线路干扰。长距离通信或者现场有强电磁干扰,数据在传输过程中被篡改了。
  • 从站程序有bug。CRC计算逻辑写错了。

避坑指南:我曾经在一个光伏项目上,CRC错误反复出现。查了两天,最后发现是串口线太长,信号衰减严重。换成屏蔽双绞线,问题解决。所以,别小看物理层。

3.2.3 地址不匹配

现象:主站发请求,从站没反应。或者主站收到了响应,但数据是别的设备的。

原因分析:

  • 主站配置的从站地址,和从站实际地址不一致。
  • 总线上挂了多个从站,地址冲突了。两个设备都设成地址1,那主站就懵了。

怎么排查?很简单。Modbus Slave里有个“Display”菜单,打开“Communication”窗口。你能看到主站发过来的请求报文。如果请求里的地址是1,但你从站设的是2,那肯定不理你。

3.3 抓包分析:Wireshark过滤Modbus TCP报文

有时候,工具界面显示正常,但你就是觉得哪里不对。这时候,抓包是终极手段。Wireshark,干这活的神器。

启动Wireshark,选择你的网卡。开始抓包。然后让Modbus Poll发几个请求。停止抓包。

怎么过滤?在过滤栏输入:

modbus

Wireshark会自动识别Modbus TCP协议。如果你只想看某个IP的流量:

modbus and ip.addr == 192.168.1.100

点开一个报文,你会看到:

  • Transaction Identifier(事务标识符):用来匹配请求和响应。
  • Protocol Identifier(协议标识符):Modbus协议固定为0。
  • Length(长度):后面数据的字节数。
  • Unit Identifier(单元标识符):其实就是从站地址。
  • Function Code(功能码):比如03。
  • Data(数据):具体的寄存器地址和数值。

实战技巧:我经常用Wireshark来验证CRC计算对不对。虽然Modbus TCP本身不带CRC(那是RTU的事),但如果你在TCP上跑RTU封装,CRC字段就在数据末尾。Wireshark会帮你标出来,红色表示校验错误。一眼就能看出问题。

举个例子。有一次,现场反馈说数据偶尔跳变。我抓了半小时的包,发现每隔几分钟就有一个CRC错误的报文。顺着这个线索,找到了一个接触不良的端子。嗯,抓包就是这么有用。

3.4 本章知识体系

下面这张图,把Modbus通信测试的核心逻辑串起来了。从工具配置到故障排查,再到抓包验证,每一步都有对应的手段。

Modbus通信测试实战知识体系 点对点测试 常见故障排查 抓包分析 Modbus Poll + Modbus Slave 参数匹配:地址/功能码/波特率 超时(Timeout) CRC校验错误 地址不匹配 Wireshark过滤:modbus 报文结构解析 CRC验证与异常定位 工具 + 经验 = 高效调试

好了,这一章的内容就到这儿。工具会用,故障会查,包会抓,Modbus通信这块你基本就稳了。下一章咱们聊聊更复杂的场景——多从站轮询和性能优化。


公众号:蓝海资料掘金营,微信deep3321