首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >多库房分布式部署:恒湿一体机 RS485 协议分组采集与平台数据汇总

多库房分布式部署:恒湿一体机 RS485 协议分组采集与平台数据汇总

原创
作者头像
BJ盛世宏博小程
发布于 2026-10-16 09:19:27
发布于 2026-10-16 09:19:27
100
举报

多库房分布式部署:恒湿一体机 RS485 协议分组采集与平台数据汇总

物联网 · 盛世宏博 · 分布式采集


一、为什么多库房不能沿用单条长总线

区县馆扩到 3 个楼层、6~12 间库房之后,最容易踩的惯性错误就是把所有一体机串成一条 RS485 从头拉到尾。实测里这条链路一定出问题:

  • 跨楼层穿管超过 800m,信号末端 A-B 压差掉到 80mV 以下,CRC 错误率随湿度线性上涨
  • 某库施工碰断中间接头,后半段全部 slave 离线,平台分不清"哪台坏了"
  • 20 台设备串行轮询一圈要 40s+,消杀状态变更被平滑掉,门禁互锁事件漏报

分布式部署的判据很朴素:一个防火分区 = 一条独立总线 = 一个边缘采集域,平台只做汇总,不碰底层轮询时序。


二、分组拓扑与硬件落位

1. 推荐拓扑

代码语言:javascript
复制
┌── MQTT/HTTP ──▶ 智慧档案平台
                          │
        ┌─────────┐  ┌────┴────┐  ┌─────────┐
        │网关 GW-A│  │网关 GW-B│  │网关 GW-C│
        │4×RS485  │  │4×RS485  │  │TCP桥接  │
        └─┬─┬─┬─┬─┘  └─┬─┬─┬─┬─┘  └────┬────┘
          │ │ │ │       │ │ │ │         │
        库1 库2 库3 库4 库5 库6 库7    远端楼栋(串口服务器)

2. 分组硬约束

项目

工程值

超了怎么办

单总线从站数

≤8

拆第二条总线

单总线物理长度

≤500m@9600

加 RS485 中继或换 TCP 方案

单网关管理域

≤32 台

加第二台网关

终端电阻

仅首尾

中间任何接头不并电阻

屏蔽层接地点

网关侧单点

楼层配电箱地≠通讯地,分开

3. 地址段固化(交付后不重排)

代码语言:javascript
复制
段1 0x01~0x08  普通档案库群
段2 0x09~0x10  特藏/古籍库群(轮询权重更高)
段3 0x11~0x18  缓冲间/查阅厅/消毒仓
段4 0x19~0x20  备用与调试

平台点名强制带 gateway_id + bus_id + slave,禁止只存 slave 数字。


三、边缘侧分组轮询实现

1. 三档寄存器窗口

不是每个寄存器都 2s 扫一遍。同一从站用 0x03 连续读,把帧数压下来:

代码语言:javascript
复制
# 单 slave 一次 0x03 读 6 个连续寄存器
# 40001~40006 → run_mode / target_rh / target_temp / deadband
#               / humidify_out / dehumid_out
READ_BLOCKS = {
    "fast":   {"addr": 0,  "cnt": 8,  "period": 2},   # 温湿+状态字+联锁
    "medium": {"addr": 8,  "cnt": 6,  "period": 5},   # 净化/消杀/臭氧
    "slow":   {"addr": 14, "cnt": 5,  "period": 30},  # 故障/滤网/累计时长
}

8 台设备 fast 轮完实测 <150ms,给 medium/slow 留足时隙,总线不撞车。

2. 总线级故障隔离

代码语言:javascript
复制
class BusDomain:
    def poll(self, slave):
        if slave in self.quarantine:          # 已隔离的跳过
            return None
        try:
            return self.modbus_read(slave)
        except NoAck:
            self.strikes[slave] += 1
            if self.strikes[slave] >= 3:
                self.quarantine[slave] = now() + 300   # 5min 冷却
                publish_event({"type":"device_isolated",
                               "gateway":self.gw,
                               "slave":slave})

关键区别:隔离的是单 slave,不是整条总线。隔壁库设备完全不受影响。

3. 消杀事件快通道

状态字 bit6 / 联锁字 bit0~bit2 任何位翻转 → 立刻打断周期队列,优先读完整消杀包并上送,平台侧延迟控制在 1s 内。


四、上送协议与平台归一化

1. 边缘 → 平台 payload

代码语言:javascript
复制
{
  "gw": "GW-3F-A",
  "bus": "BUS-01",
  "zone": "库房A-普通档案",
  "slave": 3,
  "ts_platform": 1702545600123,
  "ts_device":   1702545600000,
  "freshness_ms": 123,
  "payload": {
    "rh":      {"v": 53.2, "raw": 532, "q": "GOOD"},
    "temp":    {"v": 21.5, "raw": 215, "q": "GOOD"},
    "status":  {"raw": 0x00A2, "disinfecting": false, "purifying": true},
    "safety":  {"door":0,"human":0,"fire":0,"water":0},
    "ozone_ppm": 0.018
  },
  "bus_meta": {"crc_err_1h": 2, "rtt_ms": 41}
}

2. 三种上送模式并存

模式

触发条件

用在哪

tick

固定 5s 打包

温湿平稳期保底

delta

|Δrh|≥0.5% 或 |Δt|≥0.2℃

梅雨季/开门扰动

edge

状态字/联锁字异或非零

消杀启停、门禁事件

平台侧以 (gw, bus, slave, ts_platform) 做幂等主键,断线重传不重复落盘。


五、平台汇总层:从"点"到"库"到"馆"

1. 三层聚合

代码语言:javascript
复制
设备层  → 原始点 + 质量戳
  ↓ 按 zone 分组窗口(30s)
库区级  → avg_rh / avg_temp / any_fault / disinfecting_count
  ↓ 按 archive 滚动
馆级    → 全馆达标率 / 在线率 / 消杀排程表 / 告警汇总

2. 跨库联动只在平台层做

边缘网关不知道其他库房的存在。典型例子——消杀排程:

代码语言:javascript
复制
平台算好:库房A 22:00~00:00 臭氧窗口
         库房B 00:30~02:30(错开相邻库)
         下发 scheduled_start/end 到各网关 → 网关只负责写本域 slave

相邻库联锁、全馆停机这类"全局决策"不下沉到串口。

3. 断网行为矩阵

层级

断什么

行为

设备

和网关失联

按最后写入的 target/deadband 本地 PID 继续跑

网关

和平台失联

本地缓存 24h 环形缓冲,恢复后按 ts 顺序补传

平台

某网关整体离线

该域所有点标 STALE,其他域正常聚合,不降级


六、验收口径(区县馆甲方能直接抄)

  1. 任意拔掉某一库总线末端接头 → 仅该库 slave 标 offline,其余域 30s 内无抖动
  2. 消杀中手动开门 → 平台事件记录 ≤1.5s,对应 slave 的 disinfect_mode 回读为 0
  3. 72h 连续:全馆通讯可用率 ≥99.5%,单 slave 隔离触发次数 ≤1 次
  4. 网关断电重启 → 自动恢复轮询,历史空洞用 STALE 填充并留审计备注
  5. 平台导出:每库小时级达标率(落在目标带内的占比)和昼夜极差报表

七、收口

多库房分布式这件事,RS485 本身没变,变的是边界划在哪儿:

一库一总线、一域一网关、快中慢三档轮询、单设备隔离不扩散、边缘只采不管、平台只汇不轮、事件走快通道、断线靠本地自治兜底。

分组采集解决"采得稳",平台汇总解决"看得全",两个半件事分开做,多库房项目就不会在验收季集体返工。


关键词:多库房分布式,RS485分组采集,边缘网关,分区轮询,三档寄存器窗口,单设备隔离,MQTT上送,三层聚合,断线续传,消杀排程

标签:#多库房 #分布式部署 #恒湿一体机 #RS485 #分组采集 #边缘网关 #分区轮询 #平台汇总 #故障隔离 #智慧档案

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 多库房分布式部署:恒湿一体机 RS485 协议分组采集与平台数据汇总
    • 一、为什么多库房不能沿用单条长总线
    • 二、分组拓扑与硬件落位
      • 1. 推荐拓扑
      • 2. 分组硬约束
      • 3. 地址段固化(交付后不重排)
    • 三、边缘侧分组轮询实现
      • 1. 三档寄存器窗口
      • 2. 总线级故障隔离
      • 3. 消杀事件快通道
    • 四、上送协议与平台归一化
      • 1. 边缘 → 平台 payload
      • 2. 三种上送模式并存
    • 五、平台汇总层:从"点"到"库"到"馆"
      • 1. 三层聚合
      • 2. 跨库联动只在平台层做
      • 3. 断网行为矩阵
    • 六、验收口径(区县馆甲方能直接抄)
    • 七、收口
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档