FastBee ARM 网关概览
页面导读
文档基准与实现现状
本栏目文档依据 fastbee-gateway 项目(gitee.com/beecue/fastbee-gateway)master 分支提交 b1a16cbc 编写。项目处于活跃开发期:部分协议驱动与链路仍在接线中,各页面会明确标注"已实现 / 开发中 / 设计完成待接通"的状态,请以状态标注为准评估可用性。
1. 产品简介
工厂里有大量 PLC、传感器、电表、空调控制器等设备,它们说着不同的"语言"(Modbus、OPC UA、BACnet……),而云平台只听懂 MQTT。FastBee Gateway 就是它们之间的翻译官:读取现场设备的寄存器数据,统一转换为标准 Tag 模型,经过死区过滤、变化检测、批量合并后,通过 MQTT 实时上报到 FastBee 平台;同时支持云端反向下发控制指令,实现"采集 + 控制"双向通道。
作为 FastBee 云边端一体化方案的原生组件,其核心价值在于:从 ESP32 传感器 → 网关 → 边缘 → 云端 → 大屏的全链路打通,全栈自研、零商业依赖,与 FastBee 开源物联网平台 和 设备端固件 共享同一套物模型与 MQTT 主题规范。
2. 核心亮点
| 特性 | 说明 |
|---|---|
| 多协议支持 | Modbus RTU/TCP、OPC UA、BACnet IP、DLT645、S7comm、IEC104,覆盖主流工业现场 |
| 零代码接入 | Web 界面配置设备和点位,无需编写代码 |
| 断网缓存设计 | SQLite 本地缓存(上限 10 万条),网络恢复后补传(链路接通中,见第 8 节) |
| 双向控制 | 云端下发指令 → 网关写寄存器 → 设备执行 |
| GPIO 硬件接口 | DI/DO/AI 直接接入开关量、继电器、模拟量传感器 |
| 工业报警引擎 | 5 种报警类型 + 死区防抖 + 状态机 + 操作员确认 |
| 驱动健康监控 | 6 态连接状态机 + 连续错误自动隔离 + 自动恢复 |
| 轻量部署 | 单个二进制 + JSON 配置,低内存设备即可运行 |
3. 典型应用场景
| 场景 | 说明 |
|---|---|
| 智慧工厂 | 采集 PLC/传感器数据(温度、压力、流量)→ 上报云端看板 |
| 楼宇自控 | BACnet 空调/照明控制 → 远程监控与节能管理 |
| 电力监控 | Modbus/DLT645 电表与保护装置 → 用电分析与报警 |
| 智慧农业 | 土壤/气象传感器 → 自动灌溉控制 |
| 设备运维 | 设备运行状态监控 → 预测性维护 |
4. FastBee 生态架构
网关在 FastBee 云边端一体化方案中的位置:
┌──────────────────────────────────────────────────────────────────────┐
│ fastbee-cloud (云端中央平台) │
│ Spring Boot + Vue3 + 自研 MQTT 服务端 + MySQL + TDengine │
│ 全局设备管理 · 大数据分析 · 外网访问 · OTA 管理 │
├──────────────────────────────────────────────────────────────────────┤
│ ↕ MQTT 桥接 (外网/TLS) │
├──────────────────────────────────────────────────────────────────────┤
│ fastbee-edge (边缘平台,可多实例) │
│ FastBee Docker 精简部署 · 自研 MQTT 服务端 · 本地规则引擎 │
│ 内网低延迟控制 · 断网自治 · 数据就近处理 │
├──────────────────────────────────────────────────────────────────────┤
│ ↕ MQTT (内网/局域网) │
├────────────────────────────────┬─────────────────────────────────────┤
│ fastbee-gateway (本网关) │ fastbee-arduino (ESP32 直连设备) │
│ C++17 · 自研协议栈 │ C++ Arduino · WiFi MQTT 直连 │
│ Modbus/OPC UA/BACnet/DLT645 │ 智能开关/传感器/门锁/RGB 灯带 │
│ RS485/以太网 → MQTT 转换 │ 物模型属性上报 · 指令接收执行 │
└────────────────────────────────┴─────────────────────────────────────┘5. 功能模块
| 模块 | 功能 |
|---|---|
| 概览仪表盘 | 系统状态(CPU/内存/温度)、设备在线统计、数据流量、报警概览 |
| 网络管理 | 以太网 WAN/LAN、WiFi STA/AP 配网、DHCP/DNS、状态监控 |
| 安全认证 | 用户登录 + Token 会话、多角色权限模型、MQTT TLS 加密选项 |
| 工业协议采集 | Modbus RTU/TCP、OPC UA、BACnet IP、IEC104、DLT645、S7comm |
| 数据采集/上报 | 定时轮询、死区过滤、变化触发、批量合并、MQTT 上报(AES 认证) |
| 反向控制/联动 | 云端指令 → 写寄存器、DO 控制、阈值报警、联动规则、定时任务 |
| GPIO 管理 | DI 状态/脉冲计数、DO 控制、AI 工程值转换(4-20mA/0-10V)、LED |
| 工业报警引擎 | 5 种报警类型、死区防抖、状态机(NORMAL→ACTIVE→ACKED→RETURNED) |
| 驱动健康监控 | 6 态连接状态机、连续错误自动隔离、Watchdog 超时、自动恢复 |
| Tag 聚合计算 | MAX/MIN/AVG/TOTAL/DELTA/RATE 滑动窗口聚合 |
| 工程值转换 | 线性缩放、开方缩放(差压流量计)、反向转换(控制下发) |
| 在线调试 | 实时数据查看、手动读写测试、MQTT/串口调试、Ping 测试 |
| 系统管理 | 用户管理、日志轮转、NTP 时间同步、配置导入导出、OTA 升级 |
| 容错与可靠性 | 断网缓存补传设计、MQTT 指数退避重连、systemd watchdog、崩溃自愈 |
各模块的实测接通状态见第 8 节与各分页标注。
6. 技术架构
| 项目 | 技术选型 |
|---|---|
| 语言 | C++17 |
| 构建系统 | CMake 3.16+ |
| HTTP 服务 | cpp-httplib v0.18 |
| MQTT 客户端 | Eclipse Paho MQTT C++ |
| 日志 | spdlog v1.14 |
| JSON | nlohmann/json v3.11 |
| 数据库 | SQLite3(本地缓存) |
| 加密 | OpenSSL(AES/HMAC) |
| 串口 Modbus | libmodbus |
| OPC UA | open62541(可选) |
| BACnet | BACnet Stack(可选) |
| GPIO | libgpiod(可选) |
| 测试 | GoogleTest v1.15 |
软件架构:
┌───────────────────────────────────────────────────────────────┐
│ fastbee-gateway (C++ daemon) │
│ │
│ ┌──────────┐ ┌────────────┐ ┌────────────────────────┐ │
│ │ Web 管理 │ │ TagEngine │ │ FastBee MQTT 客户端 │ │
│ │ (内置HTTP)│ │ 采集引擎 │ │ → edge 平台 MQTT 服务端│ │
│ └──────────┘ └────────────┘ └────────────────────────┘ │
│ ┌──────────┐ ┌────────────┐ ┌────────────────────────┐ │
│ │ 设备管理 │ │ 配置管理 │ │ GpioManager (libgpiod) │ │
│ │ 子设备注册│ │ JSON+SQLite│ │ DI / DO / AI / LED │ │
│ └──────────┘ └────────────┘ └────────────────────────┘ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ 统一 Tag 模型 (TagConfig) │ │
│ │ ModbusTag / OpcUaTag / BacnetTag / GpioTag / SystemTag│ │
│ └────────────────────────────────────────────────────────┘ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ 协议驱动抽象层 (IProtocolDriver) │ │
│ │ init() / readTags() / writeTag() / 动态加载 .so │ │
│ └────────────────────────────────────────────────────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ Modbus │ │ OPC UA │ │ BACnet │ │ IEC104 / DLT645 │ │
│ │ libmodbus│ │ open62541│ │ BACnet St│ │ lib60870 / 自研 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────────────┘ │
├───────────────────────────────────────────────────────────────┤
│ Linux HAL (ARM) │
│ /dev/ttyS* (多串口) /dev/i2c-* libgpiod ext4 │
└───────────────────────────────────────────────────────────────┘7. 支持的协议
| 协议 | 传输方式 | 依赖库 | 驱动代码状态 |
|---|---|---|---|
| Modbus RTU | RS485 串口 | libmodbus | 已实现:连接、FC01/02/03/04 读取、FC05/06/15/16 写入 |
| Modbus TCP | 以太网 | libmodbus | 已实现:同上 |
| DLT645 | RS485 串口 | 自研 | 帧格式完整(1997/2007 双版本),串口链路联调中 |
| Siemens S7 | 以太网 | Snap7(可选) | 双模式:真实实现 / Stub 模拟 |
| OPC UA | 以太网 | open62541 | 双模式:-DFASTBEE_ENABLE_OPCUA=ON 启用真实通信,默认 Stub |
| BACnet IP | 以太网 | BACnet Stack | 接口已定义,当前为 Stub 模拟实现 |
| IEC 60870-5-104 | 以太网 | lib60870(待集成) | Stub:帧格式与 28 个典型变电站数据点完整,真实通信待集成 |
驱动开发细节见 协议驱动开发。
8. 当前实现现状与限制
以下结论来自对提交 b1a16cbc 源码的直接核查,用于避免把设计能力误认为端到端可用能力:
- 驱动接线阻塞:
GatewayApp::initDrivers()当前只加载并记录驱动配置数量,没有把配置的驱动实例注册到 TagEngine。因此仅写入drivers配置还不会形成真实采集闭环,这是所有协议共同的应用层阻塞项。 - 反向控制未闭环:MQTT 客户端实现了
/{productId}/{deviceNum}/function/#订阅原语,但当前没有生产代码调用subscribeFunction,云端反向控制链路未接通;手工调试写接口POST /api/debug/write可用。 - 离线补报未接通:活动上报回调在 MQTT 断开时记录并跳过本批数据,
SqliteCache尚未接入上报链路。 - 部分系统接口为占位:恢复出厂仅记录日志并返回成功;OTA 上传接口仅确认收到文件,未完成校验、安装与回滚。
- Stub 驱动:OPC UA/BACnet/IEC104 等 Stub 实现可能返回模拟成功,不能用于验收真实设备通信。
上述限制不影响 Web 管理、设备/Tag 管理、报警引擎、告警、外设、调试与监控等已注册功能的代码路径。解除阻塞的清单见 快速开始 第 7 节。
9. 文档入口
- 快速开始:Docker 启动、Web 登录、MQTT 配置、Modbus 设备与 Tag 的开发预览清单。
- 部署:硬件要求、Docker、x86/树莓派/ARM 交叉编译、deb 包、systemd 与首次配网。
- 配置:以运行时代码为准的配置键、驱动/设备/Tag 字段、MQTT 主题与数据格式。
- 运维:日志、监控、备份恢复、故障排查场景与性能调优。
- API:按实际注册路由整理的 REST API 参考、认证与占位行为说明。
- 外设与联动:DI/DO/AI/AO/LED/蜂鸣器/看门狗外设模型与外设执行规则引擎。
- 协议驱动开发:IProtocolDriver 接口、驱动注册机制与各协议驱动实现要点。
10. 常见问题
10.1 网关和 ESP32 设备端固件是什么关系?
两者是 FastBee 云边端体系中互补的两层:ESP32 固件(fastbee-arduino)让单个传感器/开关通过 WiFi 直连云平台;fastbee-gateway 部署在工业网关上,把不支持 IP 协议的现场总线设备(RS485/PLC/电表)汇聚后统一经 MQTT 上行。两者上报使用同一套物模型与主题规范,云端无需区分。
10.2 没有真实工业设备能开发调试吗?
可以。x86_64 开发机上可用 Stub 驱动和模拟后端运行全链路;Modbus 可用 pymodbus 启动 TCP 模拟器联调(见部署的模拟设备一节);OPC UA/BACnet/IEC104 的 Stub 驱动会生成模拟数据用于界面与流程验证。
10.3 断网期间采集的数据会丢吗?
设计上不会:网关内置 SQLite 离线缓存(默认上限 10 万条/50MB),恢复后按时间顺序补传。但当前提交中缓存尚未接入活动上报链路(MQTT 断开时数据会被跳过),补传能力以后续版本接通为准,见第 8 节。
10.4 如何接入一种新的工业协议?
实现 IProtocolDriver 接口(init/readTags/writeTag 等 7 个方法),用 FASTBEE_REGISTER_DRIVER 宏静态注册或编译为 .so 动态加载,再在配置中添加设备与 Tag 即可。完整步骤与 Modbus/OPC UA 参考实现见 协议驱动开发。

