ITPub博客

首页 > 应用开发 > Python > 工业物联网协议仿真平台ProtoForge V1.0.0发布:一台电脑模拟17种工业设备

工业物联网协议仿真平台ProtoForge V1.0.0发布:一台电脑模拟17种工业设备

原创 Python 作者:suoten 时间:2026-05-21 10:27:04 0 删除 编辑

一、一个真实的开发困境

去年接一个物联网网关项目,客户要求对接西门子S7、三菱MC、Modbus TCP、GB28181国标摄像头四种协议。问题是我手边一台真实设备都没有:
  • 西门子S7-1200 PLC 市场价 3000+
  • 海康威视摄像头支持GB28181的 500+
  • 三菱FX5U PLC 2500+
  • 还有各种传感器、CNC数控机床...
等采购流程走完,项目 deadline 早就过了。最后只能硬着头皮写代码,拿到客户现场再调试——结果可想而知,现场联调了整整3天,问题一堆。
这不是个例。做工业物联网开发的同行,80%的时间都花在"等硬件"和"现场联调"上。
核心矛盾:工业协议调试需要"真实的协议交互过程",而不仅仅是"看起来正确的数据"。

二、ProtoForge 的技术方案

基于这个痛点,我开发了一个开源的物联网协议仿真平台,核心理念是"一台电脑 = 整个工业现场"。

2.1 全链路仿真

传统模拟只关注"数据对不对",比如Modbus读寄存器返回一个固定值。但真实工业场景中,协议交互是一个完整的过程:
plain
复制
客户端连接 -> 握手认证 -> 请求数据 -> 服务端响应 -> 异常处理 -> 断开连接
以GB28181国标协议为例,交互流程包括:
plain
复制
1. SIP REGISTER --> 上级平台(设备主动注册,支持Digest认证)
2. <-- MESSAGE Catalog(平台查询设备目录,设备响应NVR通道列表)
3. <-- INVITE(平台请求实时视频,携带SDP媒体描述)
4. --> 200 OK + SDP(设备确认并协商媒体参数)
5. <-- ACK(平台确认,建立RTP通道)
6. ==============>> RTP/PS 视频流(设备持续推流,25fps,CIF分辨率)
7. <-- BYE(平台停止视频,设备释放资源)
如果只模拟"返回一个视频流地址",无法验证平台端的SIP解析、SDP协商、RTP接收逻辑是否正确。必须完整实现SIP协议栈和RTP推流能力。

2.2 架构设计

采用前后端分离设计:
plain
复制
+-----------------------------------------+
|              Vue3 前端界面               |
|  仪表盘 | 设备管理 | 协议服务 | 场景编排   |
+-----------------------------------------+
                   |
                   v
+-----------------------------------------+
|           FastAPI 后端服务               |
|  +---------+ +---------+ +---------+   |
|  | 协议引擎 | | 设备实例 | | 场景调度 |   |
|  | 17种协议| | 90+模板 | | 规则引擎|   |
|  +---------+ +---------+ +---------+   |
|  +---------+ +---------+ +---------+   |
|  | 测试框架 | | 录制回放 | | 数据转发 |   |
|  | 14种断言| | 加密存储 | | 多目标  |   |
|  +---------+ +---------+ +---------+   |
+-----------------------------------------+
                   |
                   v
+-----------------------------------------+
|         SQLite / PostgreSQL             |
+-----------------------------------------+
每种工业协议独立为一个模块,遵循统一的接口规范,按需加载。基础安装包含13种核心协议,额外4种(OPC-UA、MQTT、BACnet、S7)通过可选依赖安装。

2.3 设备模板系统

工业设备虽然品牌型号繁多,但底层协议行为可以抽象为模板:
JSON
复制
{
  "name": "西门子S7-1200",
  "protocol": "s7",
  "points": [
    {"name": "温度", "type": "float", "address": "DB1.DBD0", "generator": "sine"},
    {"name": "压力", "type": "int", "address": "DB1.DBW4", "generator": "random"},
    {"name": "运行状态", "type": "bool", "address": "DB1.DBX6.0", "generator": "toggle"}
  ]}
模板定义了协议类型、测点列表(数据类型、内存地址、生成策略)和场景规则。目前整理了90+模板,覆盖PLC、传感器、CNC、摄像头、HVAC、伺服驱动器等。

2.4 数据生成策略

仿真数据不能是随机数,要符合物理规律:
表格
生成器 适用场景 示例
sine 周期性波动(温度、压力) value = base + amplitude * sin(2*pi*t/period)
random_walk 随机游走(液位、流量) 每次在上一值基础上加减随机步长
toggle 开关状态(运行/停止) 按概率或定时切换布尔值
step 阶梯变化(产量计数) 固定间隔递增整数值
script 复杂逻辑(自定义公式) 安全沙箱内执行Python表达式

三、核心功能

3.1 协议服务 — 17种工业协议一键启停

支持Modbus TCP/RTU、OPC-UA、MQTT、HTTP、GB28181、BACnet、Siemens S7、Mitsubishi MC、Omron FINS、Rockwell AB、OPC-DA、FANUC FOCAS、MTConnect、Mettler-Toledo、PROFINET IO、EtherCAT。
每种协议独立配置端口和高级参数,全部支持一键启动/停止。

3.2 可视化场景编排

单一设备仿真只能验证"点对点"通信,但真实工厂是多设备协同的。采用拖拽式拓扑编辑:
  • 左侧设备面板拖拽设备到画布
  • 自动显示设备间连线(基于协议类型匹配)
  • 点击设备配置测点和规则
  • 一键启停整个场景
支持4种规则类型(threshold、value_change、timer、script),规则动作包括设定目标值、切换布尔值、递增、递减,支持冷却机制防止频繁触发。

3.3 实时调试日志

工业调试最痛苦的是"不知道数据发出去没有"。WebSocket实时推送协议报文:
plain
复制
[15:47:01] [系统] [modbus_tcp] server_start  Modbus TCP服务启动 0.0.0.0:5020
[15:47:02] [接收] [modbus_tcp] 01 03 00 00 00 0A C5 CD  <- 客户端读保持寄存器
[15:47:02] [发送] [modbus_tcp] 01 03 14 00 01 00 02 ...  -> 响应10个寄存器值
支持按协议筛选、按方向筛选(收/发/系统)、关键词搜索、暂停、导出JSON。

3.4 自动化测试框架

内置14种断言类型(equals、contains、regex_match、json_path、status_code等),支持变量提取和链式调用,输出HTML报告。

四、典型使用场景

场景1:Modbus上位机开发

bash
复制
# 30秒启动docker run -d --name protoforge -p 8000:8000 suoten/protoforge:latest
打开浏览器 -> 协议服务 -> 启动Modbus TCP -> 模板市场 -> 选择"西门子S7-1200"模板 -> 一键创建。上位机代码直接连接localhost:5020,像连接真实PLC一样读写寄存器。
节省:1台PLC采购周期(2-4周)+ 现场调试时间(2-3天)

场景2:GB28181国标平台联调

传统方式:买摄像头 -> 配置SIP服务器 -> 调试注册 -> 调试推流。
ProtoForge方式:启动GB28181协议 -> 创建摄像头设备 -> 自动完成SIP注册 -> 自动响应目录查询 -> 收到INVITE后自动推RTP视频流。
节省:摄像头采购成本 + 现场部署时间

场景3:网关压力测试

模板市场 -> 批量创建 -> 选择数量100 -> 一键生成。所有设备同时在线,不同协议混合接入,真实模拟工厂现场。配合Prometheus指标端点,直接对接Grafana看性能曲线。

场景4:给客户演示

以前出差要带PLC + 传感器 + 网线 + 电源 + 转接头。现在一个笔记本搞定,现场连WiFi,客户直接看Web界面,设备在线、数据跳动、日志实时刷新。

五、部署方式

表格
方式 适用场景 启动时间
Docker 快速体验、开发测试 30秒
源码部署 深度定制、二次开发 10分钟
K8s Helm 生产环境、高可用 5分钟
Docker镜像支持amd64/arm64多架构,内置SQLite开箱即用,生产环境可切换PostgreSQL。
性能基准:Modbus TCP并发约200连接,MQTT约500连接,OPC-UA约50连接,GB28181 RTP推流约10路。空载内存约150MB,100设备约500MB。

六、安全设计

工业场景对安全敏感:
  • JWT + RBAC:admin/operator/user/viewer四种角色,100% API权限覆盖
  • bcrypt密码存储:自动加盐,抵抗彩虹表攻击
  • 登录保护:连续5次失败锁定5分钟,API限流防暴力破解
  • 协议安全:OPC-UA证书自动生成、MQTT TLS加密、GB28181 SRTP、录制报文加密

七、生态对接

支持与EdgeLite Gateway(轻量级边缘计算物联网网关)无缝对接。创建设备时填写网关地址,模拟设备自动注册到网关,完成注册->连接->采集->验证->监控的完整联调链路。
这和GB28181填"上级SIP服务器地址"的体验完全一致——配置一个URL,剩下的事系统自动搞定。

八、写在最后

做工业物联网开发,硬件成本和时间成本是最大的两座山。协议仿真平台的目标就是把这两座山铲平——让开发者专注在业务逻辑上,而不是等快递、接网线、调设备。
V1.0.0是里程碑,但不是终点。接下来计划更多协议覆盖(EtherNet/IP、CANopen、LoRaWAN)、插件化架构、数字孪生可视化。
如果你也在做物联网开发,遇到过类似的硬件调试困境,欢迎交流。

如果这个项目帮你节省了硬件采购成本或联调时间,欢迎Star支持持续开发。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70050062/viewspace-3171771/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2026-05-07

  • 博文量
    69
  • 访问量
    55000