Skip to content

FastBee ARM 网关概览 ​

页面导读 ​

这是什么FastBee Gateway 是运行在 Linux 工业网关硬件上的 C++ 协议转换与数据采集软件,是现场工业设备(PLC、电表、传感器)与 FastBee 云平台之间的"翻译官"。
适合谁需要把 Modbus、DLT645、S7 等现场总线设备接入 FastBee 平台的集成商与开发者,以及希望基于插件化驱动架构二次开发的嵌入式工程师。
前置条件一台运行 Linux 的网关设备(ARM 工业网关、树莓派或 x86_64 开发机),以及一个可连接的 MQTT Broker(FastBee 边缘/云平台或开发用 Mosquitto)。
阅读路径先读本页了解能力边界,再按 快速开始 启动开发环境,随后参考部署、配置、运维与 API 各页。

文档基准与实现现状

本栏目文档依据 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 云边端一体化方案中的位置:

text
┌──────────────────────────────────────────────────────────────────────┐
│  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
JSONnlohmann/json v3.11
数据库SQLite3(本地缓存)
加密OpenSSL(AES/HMAC)
串口 Modbuslibmodbus
OPC UAopen62541(可选)
BACnetBACnet Stack(可选)
GPIOlibgpiod(可选)
测试GoogleTest v1.15

软件架构:

text
┌───────────────────────────────────────────────────────────────┐
│              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 RTURS485 串口libmodbus已实现:连接、FC01/02/03/04 读取、FC05/06/15/16 写入
Modbus TCP以太网libmodbus已实现:同上
DLT645RS485 串口自研帧格式完整(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 参考实现见 协议驱动开发。

蜂信物联 | fastbee.cn