Skip to content

网关外设与联动 ​

开发预览

本页依据提交 b1a16cbc 的源码与项目外设系统设计文档整理。PeripheralManager 与 PeriphExecEngine 代码已存在且 API 路由已注册;真实硬件访问依赖编译选项与后端实现(libgpiod / Linux IIO / 模拟后端),x86 开发环境默认使用模拟后端。

1. 概述 ​

不同型号工业网关的硬件配置差异极大(DI 4~16 路、DO 4~8 路、AI 2~4 路不等),引脚功能不能硬编码在代码里。外设系统将物理引脚映射为虚拟外设对象,通过配置文件和 Web/API 动态定义,再由执行规则引擎实现"触发器 → 动作"的自动化联动(如门磁开门 → 亮灯、温度超限 → 启动风扇)。

两个核心模块:

  • PeripheralManager(外设配置中心):外设增删改查、硬件初始化/释放、引脚冲突检测、运行时状态与读写统一入口。
  • PeriphExecEngine(外设执行规则引擎):触发器检测、规则匹配、动作编排执行、结果记录与 MQTT 上报。

关键约束:规则引擎永不直接触碰硬件后端,所有读写都经过 PeripheralManager,保证引脚冲突检测、状态同步、日志审计只有一条路径。

2. 外设类型体系 ​

采用字符串类型编码(对现场工程师更可读),聚焦 7 类工业 I/O:

类型典型路数信号特征方向典型负载
DI4~16光耦隔离,12/24V 干接点/湿接点输入门磁、烟感、按钮、限位开关
DO4~8继电器或 MOSFET,常开/常闭输出报警器、指示灯、电磁阀
AI2~44-20mA / 0-10V 标准信号输入温度/压力/液位变送器
AO1~24-20mA / 0-10V 标准信号输出变频器、调节阀门
LED4低/高电平点亮输出电源/运行/网络/故障指示
BUZZER1有源/无源蜂鸣器输出本地声光告警
WATCHDOG1需周期性喂狗脉冲输出硬件看门狗芯片

外设运行时状态机:DISABLED(0) → ENABLED(1) → INITIALIZED(2) → RUNNING(3),异常为 ERROR(4)。

3. 外设配置参数 ​

每个外设由 id、name、type、enabled、channel、pins(物理引脚数组)和 params(类型特定参数)组成。各类型 params 要点:

3.1 DI 数字输入 ​

参数默认说明
pullUptrue内部上拉
activeLowfalse低电平有效(光耦输出反相时置 true)
debounceMs30软件消抖时间(连续两次采样一致才确认变化)
reportOnChangetrue状态变化时上报
triggerEdgeboth触发边沿:rising / falling / both

3.2 DO 数字输出 ​

参数默认说明
initialState0初始电平(0=断开 / 1=闭合)
activeLowfalse低电平驱动(继电器模块常见低电平触发)
outputTyperelay输出类型:relay / mosfet
pulseMs0脉冲输出时长(0=持续,>0=自动回弹,用于电磁阀点动)

3.3 AI 模拟输入 ​

参数默认说明
signalType4-20mA信号类型:4-20mA / 0-10V / 0-20mA / 0-5V
rawMin / rawMax0 / 4095ADC 原始值范围
engMin / engMax0 / 100工程值范围(线性映射)
unit""工程单位(°C / MPa / m …)
sampleIntervalMs1000采样周期
deadband0.0死区(变化超过死区才上报,抑制抖动)
wireFaultDetectfalse断线检测(4-20mA 低于 3.6mA 视为断线)

工程值线性映射:eng = engMin + (raw - rawMin) / (rawMax - rawMin) × (engMax - engMin)。

3.4 AO 模拟输出 ​

参数默认说明
signalType4-20mA信号类型
engMin / engMax0 / 100工程值范围
defaultValueengMin上电默认输出值
slewRateMs0输出缓变时间(防止阀门冲击)

3.5 LED / BUZZER / WATCHDOG ​

  • LED:role 角色(power 上电常亮 / running 心跳 1Hz 闪烁 / network 反映网络连接 / fault 由系统故障驱动)。
  • BUZZER:activeLevel 有效电平、buzzerType(active 有源 / passive 无源)、defaultPattern(off / on / beep 短鸣 3 声 / alarm 急促连续鸣叫)。
  • WATCHDOG:feedIntervalMs(喂狗周期,必须小于硬件看门狗超时)、feedPulseMs、mode(toggle 翻转 / pulse 固定脉冲)。主线程挂死时硬件看门狗超时自动复位网关,是工业现场"死机自愈"的关键手段。

3.6 配置示例 ​

json
{
  "id": "ai_temp", "name": "锅炉温度变送器", "type": "AI",
  "enabled": true, "channel": 0, "pins": [0],
  "params": { "signalType": "4-20mA", "rawMin": 0, "rawMax": 4095,
              "engMin": 0, "engMax": 200, "unit": "°C",
              "sampleIntervalMs": 1000, "deadband": 0.5, "wireFaultDetect": true }
}

外设配置存储在 config/peripherals.json,写入采用"先写 .tmp 再 rename"的原子方式;文件含 version(格式版本)与 _templates(外设模板,批量部署时快速填充参数)。

4. 外设执行规则引擎 ​

规则由**触发器(triggers,OR 逻辑)和动作(actions,按序执行)**组成,配置存储在 config/periph_exec.json。

4.1 触发器类型 ​

类型输入来源工业场景
平台触发(0)MQTT / 云端命令远程开关 DO、参数下发
定时触发(1)本地时钟(间隔 / 每日定点)周期上报、定时开关泵
事件触发(4)DI 变化、系统事件门磁开门 → 亮灯、烟感 → 报警
轮询触发(5)主动读 AI/Modbus(按 pollIntervalMs 检查)温度超限 → 启动风扇

比较操作符 0~9:EQ / NE / GT / LT / GE / LE / IN_RANGE / OUT_RANGE / CONTAINS / NOT_CONTAINS。DI 变化会自动发布 ds:<periphId> 事件;规则执行完成会发布 mc:<ruleId>:success/failed 事件,支持规则链式联动。

4.2 动作类型 ​

类型名称说明
0/1/2/3DO 置高/置低/翻转/闪烁闪烁参数 "次数,间隔ms"
4AO 设值工程值输出
5LED 控制"on" / "off" / "blink"
6蜂鸣器"off" / "on" / "beep" / "alarm"
10发送指令MQTT 上报,$value 为触发值占位符
15命令脚本PERIPH / DELAY / LOG / MQTT 多行顺序执行
21/22/23触发事件 / 启用规则 / 禁用规则规则联动
30系统重启强动作,仅建议平台触发使用

4.3 规则示例 ​

json
{
  "id": "exec_1717392000",
  "name": "烟感报警联动",
  "enabled": true,
  "execMode": 0,
  "triggers": [
    { "triggerType": 4, "triggerPeriphId": "di_smoke",
      "operatorType": 0, "compareValue": "1", "eventId": "ds:di_smoke" }
  ],
  "actions": [
    { "actionType": 0, "targetPeriphId": "do_alarm" },
    { "actionType": 6, "targetPeriphId": "buzzer_alarm", "actionValue": "alarm" },
    { "actionType": 10, "actionValue": "{\"alarm\":\"smoke\"}" }
  ],
  "reportAfterExec": true
}

execMode:0=异步(默认,提交执行线程不阻塞调度)、1=同步(动作间按 syncDelayMs 延迟,含系统重启的规则强制同步)。同一规则运行中会跳过重复触发(防重入)。

5. 安全约定与可靠性设计 ​

  • 出厂安全模板:外设与规则默认 enabled: false,不会在未知接线环境中自动动作。
  • 导入后默认禁用:批量导入的外设与规则强制禁用,需人工确认后逐个启用。
  • 引脚冲突检测:同一引脚不能被两个启用的外设占用;禁用外设可保留引脚定义,重新启用时再校验。
  • 删除保护:被规则引用的外设删除时会被拒绝并提示先解除引用。
  • 恢复前自动备份:恢复备份前先快照当前状态,保证可回滚。
  • 执行审计:规则执行结果环形缓存(最近 100 条)并记录日志。
  • 强动作限制:涉及继电器/电磁阀/重启的动作必须先"执行一次"手动验证再启用。

6. 配置管理与批量部署 ​

外设与规则支持整体导出/导入,典型批量部署流程:

  1. 首台网关配置外设与规则,逐个启用验证。
  2. 导出全部配置(GET /api/system/config 及各模块 export 接口)。
  3. 同型号网关逐台导入,重启后外设/规则加载(默认禁用)。
  4. 现场逐个启用并验证 I/O;异常时恢复备份回滚。

7. API 入口 ​

外设管理(9 个端点)与外设执行规则(9 个端点)的完整接口表见 API 第 12、13 节。

8. 实现现状 ​

  • PeripheralManager / PeriphExecEngine 代码存在且路由已注册;外设与规则的数据模型、触发器/动作语义与 FastBee-Arduino(ESP32 固件)保持一致,便于生态统一。
  • 硬件后端:LibgpiodBackend(数字量,真实网关)、IioBackend(模拟量,Linux IIO 子系统)、SimulatedHwBackend(开发/CI/单元测试,可注入 DI/AI 状态并断言 DO/AO 输出)。
  • 平台触发依赖 MQTT 反向控制链路,该链路当前未接通(见概览第 8 节);定时/事件/轮询触发为本地逻辑。
  • 早期通道式 GpioManager(/api/gpio/*)保留可用,外设管理将逐步成为唯一权威配置源。

蜂信物联 | fastbee.cn