BACnet/IP 通信模块设计说明

架构概览

  • 南向驱动:BACnetDriver(设备发现、对象扫描、读写、恢复)
  • 调度器:PointScheduler(批量读、分批回退、失败冷却)
  • 数据管线:统一 Value 模型下发到存储、WebSocket、OPC UA、MQTT 等
  • 快照缓存:ChannelManager snapshots 提供 API 即时返回

三种读取模式

  • 发现:Who-Is/I-Am,全网广播 + 单播回退,填充厂商/型号
  • 轮询:ReadPropertyMultiple 优先,失败回退单点 ReadProperty;并发隔离
  • 订阅:配置 report_mode=cov 的点位优先尝试订阅;不支持则回退为轮询

统一数据模型

{
  "channel_id": "CH-1",
  "device_id": "bacnet-18",
  "instance_id": 18,
  "point_id": "AI1",
  "value": 23.5,
  "quality": "Good",
  "timestamp": "2026-02-28T12:00:00Z",
  "meta": {
    "objectType": 0,
    "objectId": 1,
    "propertyId": 85,
    "statusFlags": null
  }
}

可靠性与恢复

  • 设备级超时隔离:每设备独立 3s 超时,不影响其他设备
  • 离线判定与冻结:失败退化为 DEGRADED,连续失败置 OFFLINE 并冻结调度
  • 恢复流程:周期触发 Who-Is,恢复后自动解冻并重建调度器

性能优化

  • 批量读取:默认分组阈值 20;避免 APDU 过大
  • 并行化:设备级并发,互不阻塞
  • 快照返回:API 从快照返回,UI 无阻塞

对外暴露

  • JSON:REST 与 WebSocket 广播统一 Value JSON
  • OPC UA:北向 OPC UA Server 动态映射 Channel/Device/Point,实时更新

安全与质量

  • 无敏感配置暴露;证书信任目录与可选认证
  • 通过单元与集成测试;遵循项目编码规范