工业协议调试的"Mock Server":我们为什么需要协议仿真

0 阅读2分钟

做过物联网网关开发的都知道,联调是最痛苦的阶段。

传统联调的三大噩梦:

  1. 设备依赖症​:你的代码写完了,但硬件还在采购流程中,等两周才能开始测试
  2. 环境不可控​:真设备的寄存器值随机变化,无法稳定复现边界条件
  3. 并发测试难​:要验证网关的 1000 点并发采集?你需要租半个车间的设备

协议仿真的本质,是给工业协议一个"Mock Server"。

就像前端开发用 MockJS 模拟后端接口,物联网开发也需要模拟设备端。但工业协议比 HTTP 复杂得多——Modbus 的功能码组合、S7 的 DB 块寻址、OPC-UA 的证书链、GB28181 的 SIP 信令交互,都不是简单返回 JSON 能搞定的。

ProtoForge 的设计思路:

不是"模拟几个寄存器值",而是​完整实现协议状态机​。

以 GB28181 为例:

REGISTER → 401 Unauthorized → REGISTER(with Digest) → 200 OK
MESSAGE Catalog → 返回设备目录
INVITE → 200 OK + SDP → ACK → RTP/PS流 → BYE → 停止推流

这套流程在真摄像头上完全一样。你的网关代码不需要改一行,就能完成完整联调。

17 种协议,每种都做到了协议级仿真:

  • Modbus TCP/RTU:支持功能码 01/02/03/04/05/06/15/16,异常响应码
  • Siemens S7:支持 DB 块读写,PLC 状态字仿真
  • OPC-UA:证书自动生成,Sign/SignAndEncrypt 模式
  • MQTT:完整 Broker 实现,支持 TLS 加密
  • BACnet:Who-Is/I-Am 服务,COV 通知

性能数据(笔记本实测):

  • Modbus TCP 并发:200+ 连接
  • MQTT 客户端:500+ 并发
  • 内存占用(100 设备):~500MB

开源方案,Docker 一键启动:

docker run -d -p 8000:8000 suoten/protoforge:latest

对于工业物联网开发者,这不仅是测试工具,更是​协议学习的沙箱​。想搞懂 S7 协议的结构?启动一个虚拟 PLC,用 Wireshark 抓包看完整的 COTP/TPKT 交互。

代码在 GitHub/Gitee 开源,欢迎提 PR 补充更多协议模板。