项目资料 / 工业物联网交互系统

工业物联网交互系统:架构与网关实现

从传感器采集,到设备联动,再到界面上的状态与控制。

这篇是我整理的项目笔记,也可以先看看项目介绍。

工业物联网交互系统

系统与分工

这是团队完成的多传感器采集、设备联动和远程交互系统。个人负责 jyx 分支的 Linux C++17 网关,以及设备侧、上位机侧的通信契约对接。

模块功能贡献范围
STM32F407 / ESP8266温湿度、光照、心率血氧采集,通过 WiFi TCP 上报团队 kq 模块
Linux C++17 GatewayTCP 接入、分帧、遥测转发、命令路由、设备状态及 UDP 发现个人 jyx 模块
STM32F103 / ESP8266LED、风扇、继电器、步进电机控制及状态心跳团队 kq 模块
MQTT 桥接System V IPC 与 MQTT 通道间转换团队 yzz 模块
Qt 客户端状态展示、控制交互、设备发现与视频接收团队 zwy 模块

两条业务链路

采集链路:F407 → TCP Gateway → StateCoordinator → System V 共享内存 → MQTT 桥接 → Qt。网关还根据联动规则下发 F103 控制,并发布事件。

控制链路:Qt → MQTT 桥接 → System V 消息队列 → Gateway → F103;人工控制接管对应器件,避免联动规则覆盖手动操作。

网关实现

  • SelectReactor 统一拥有 accept / recv / send / close,eventfd 负责唤醒;ConnectionId 隔离文件描述符复用。
  • FrameDecoder 支持 AA55 二进制帧与 CRLF 文本行,处理半包、粘包、坏帧重同步及有界接收缓冲。
  • TextProtocolParser 兼容 F407 遥测与 F103 状态心跳;设备接入格式和上位机通信契约解耦。
  • UpperComputerIpcAdapter 通过 System V 共享内存、消息队列、信号量与 cJSON 传递遥测和命令。
  • PendingCommandManager 使用 req_id 去重和单次终态仲裁,处理超时、迟到回执和重复请求。
  • DeviceSnapshotStore 发布不可变设备快照,UDP 发现只读快照,不与状态写入抢锁。
  • GatewayRuntime 管理启动、失败回滚与退出顺序,后台线程在 IPC 适配器关闭之前停止并回收。

联调与测试记录

项目 README 记录 Linux CTest 12/12 通过,包含真实 SysV IPC、UDP、SelectReactor、GatewayRuntime 与信号退出测试。记录中 F407/F103 经 ESP8266 WiFi TCP 完成实机联调:遥测上报、状态心跳、上位机控制、传感器联动与人工接管两条业务线已打通。

这些是项目既有记录,本次网站更新只核对源码与文档,没有重新运行 Linux 测试或硬件实验。

面试可展开的边界

  • F103 没有独立命令 ACK,网关回执 timeout 不等于设备执行失败,应结合状态心跳判断。
  • 二进制帧解析框架不意味着所有正式 STM32 CRC / HELLO 协议已实现,当前实机链路使用已适配的文本协议。
  • 网络、IPC 与生命周期处理属于个人网关模块;固件驱动、Qt UI 和 MQTT 桥接不算作个人独立开发。

源码定位

仓库:gitee.com/zwy-long/da_shuai_bi_zu,个人分支 jyx。主要路径为 gateway/src/net/、gateway/src/protocol/、gateway/src/ipc/、gateway/src/dispatch/、gateway/src/app/,以及 gateway/tests/。

← 返回 工业物联网交互系统回到顶部 ↑