Modbus 联机验证报告(仿真器)

日期: 2026-07-02
环境: darwin/amd64,Go 1.26,内置 Modbus TCP 仿真器(internal/testutil/modbus/simulator.go
说明: 现场 diagslave 不可用时,以仿真器 + 真实 ModbusDriver 作为 B-10 联机替代验证。

1. 测试范围

用例 文件 验证点
真实驱动 ScanEngine 采集 modbus_protocol_test.go 3 从站 200ms 周期,TasksSucceeded ≥ 3
可变延迟隔离 同上 慢从站 3s 延迟不阻塞快从站 2s 内完成
7 从站串行故障传播 同上 slave-6 离线,6/7 健康;CB 不拖死 peer
CB 离线/恢复循环 TestModbusProtocol_CBRecoveryCycles 3 轮 block/unblock,channel 保持采集

2. 执行命令

go test ./internal/integration/... -run 'TestModbusProtocol' -count=1 -timeout=5m

3. 结果摘要(2026-07-02)

指标 阈值(联机/仿真) 实测
快从站读取 Quality=Good,<2s ✅ 通过
慢从站延迟 ≥2s 或 timeout ✅ 通过(3s 注入)
串行 7 从站健康比 ≥6/7 online 等效 ✅ succeeded≥3,healthy slave Good
CB 循环后采集 channel 不 Offline ✅ succeeded≥10
timeout 比例 <5%(长时) 未跑 1h;短测 0%

4. 与 diagslave 差异

  • 仿真器支持 per-slave 延迟注入、BlockSlave、holding 寄存器种子
  • 无真实 RS485/TCP 物理层抖动;发版前建议在目标网关 + diagslave 复验
  • 框架与 ModbusDriver 路径与生产一致(Init → ReadPoints → ScanEngine serial queue)

5. 相关文件

  • internal/testutil/modbus/simulator.go
  • internal/integration/modbus_protocol_test.go
  • docs/TODO/SLA评估.md B-10