边缘网关上的暖通设定值控制:选型、部署与实测数据
这是监督式设定值推荐器,不是经过安全认证的控制系统:机组自身的联锁与安全控制优先,不给出节能率数字。
这套方案是干什么的
办公楼、商场、工厂的中央空调通常按固定排程运行:不管楼层是满是空,设定值都一样。这个方案在机组旁边 放一台网关,把暖通控制器和电能表读进同一套点位模型,用这栋楼自己的历史数据学出设定值建议,再写 回控制器;写入值从现场读回、与下发值比对一致后才算生效。
它面向中央机组:冷机、空调机组,以及它们前面的控制器。不适用于分体式空调,也不放在安全回路上。
- 选型与部署:可部署方案页
- 开源地址:暂无。
github.com/Seeed-Solution/Solution_HVAC_SmartControl目前不对外开放。
现有控制器与电表直接接入
支持 OPC UA、Modbus TCP、RS-485 上的 Modbus RTU 或 BACnet/IP 的控制器不用替换,SDM630 电表有内置模板。上限 2,000 个点位,其中最多 50 个可写。
每次写入都读回核实
写入前冻结上一次已知良好的值、质量、时间戳与优先级;整定延迟后重读点位,按容差比对。读回值质量不合格时不算通过。
出故障自动回滚并告警
读回不一致、数据源离线、预测被禁用、操作员中止、批次部分失败都会触发回滚。告警按成因标识,同一故障重复出现时复用已打开的告警。
实测容量:2,000 点位、349.99 events/s
目标 350.0,在 reComputer R2000 系列上本机回环实测一次 180 秒。条件见附录。
控制台上能看到什么
运行中的控制台渲染三样东西:带逐点质量的点位总表、列出各数据源与其已注册点位数的接入页,以及命令
回执台账。写入链路是在台账里可见的:每一行带请求值、生效值、操作者、协议确认,以及整定延迟之后的
读回结果。被带外改写过寄存器的那一条显示「不一致已补偿」并带上现场读到的值,由
plugin:prediction:rollback 下发的补偿命令紧跟在下一行。
接入页列出每个数据源与它已注册的点位数,这是确认接线成功的第一处:

点位总表带逐点质量,质量不为 good 的点在这里就能看出来:

预测运行页给出这一轮推荐的设定值、依据的历史窗口与当前控制模式:

写入链路在命令回执台账里可见——请求值、生效值、操作者、协议确认与读回结果各占一列:

以上截图接的是包内自带的协议模拟器,没有接真实电表或控制器;网关侧运行的是实际交付的软件。
需要哪些硬件
三样:一台你已经有的控制器、一块电表、一台 Docker 主机。
① 暖通控制器——机组前面现成的那台,只要支持 OPC UA、Modbus TCP/RTU 或 BACnet/IP 即可。不接机组 只做演练时,包里自带一个跑在 4841 端口上的 OPC UA 模拟器。
② 电能表——Modbus V2 寄存器映射的 Eastron SDM630,经 Modbus TCP、Modbus TCP 网关或 RS-485 接入。 提供 10 个只读点位:三相电压电流、总有功功率(kW)、总功率因数、频率、进口有功电能(kWh)。
③ 网关主机——唯一需要选型的设备。服务是跑在 x86-64 或 arm64 上的 Docker 负载,因此现场网段上 已有的 Linux 机器是受支持的目标。
| 网关 | 存储 | 什么时候选它 | |
|---|---|---|---|
![]() | reComputer R1124-10 4 GB 内存,板载 RS-485 / RS-232 / DI / DO | 16 GB eMMC | 历史数据放在服务器上,网关只留一个短窗口 |
![]() | reComputer R1125-10 同一块板,更大的 eMMC | 32 GB eMMC | 数月运行历史留在网关本地,训练集可以直接在本机重新导入 |
R1100 系列板上自带 RS-485,因此接在 RS-485 上的电表不需要额外的 USB 适配器。服务本身约占 1 GB 磁盘,存储容量决定的是不依赖服务器时本地能回看多久的历史。
其余前置条件:Docker Engine 20.10 及以上,主机 8280 与 4841 端口未被占用,以及至少一周的历史运行 数据(CSV 或 Excel,含时间、设定值、实测温度和用电量列)。
现场怎么部署
一、装硬件:接线
内置 SDM630 模板默认大端字节序与大端字序,取自厂商公开的默认值。先读一个 物理量已知的寄存器,与电表本机显示核对。电压和频率数值接近但不对、进口电能出现倒退,通常是字序配置 错误,先查字序再查接线。
把网关接到与控制器、电表(或其 Modbus TCP 网关)相同的网络上。走 Modbus RTU 时,波特率、校验位和
从站地址要与电表实际配置一致,不一致时只表现为超时,没有错误提示;并且要用串口设备部署配置:
标准 Docker 配置不挂载主机串口,容器里没有 /dev/ttyUSB0。
二、装软件:三步
逐项表单字段和应用包在可部署方案页,按现场条件选好配置后下载。
步骤轮廓:
- 部署服务——Docker 部署,可以装在跑部署工具的这台机器上,也可以经 SSH 装到现场网段的设备上。 表单里填电表通信方式、OPC UA 地址、安全限值、控制模式和告警阈值。
- 打开控制台——创建第一个管理员,确认两个数据源都在线、点位数符合预期。接入向导按协议逐项问地址与轮询周期:

- 调试——注册电表,在观察模式下跑预测,故意注入故障,最后才开启写入。批量下发前先在选择页确认这一批到底覆盖了哪些点位:

控制模式保持 observe,「安全基线批准人」留空。 批准人留空时基线持续显示「未批准」;填写批准人
等于由该工程师签字认可安全限值。
从零到控制台跑起来、点位有数,预估约 60 分钟。调试耗时更长,因为它包含一个完整人流周期的观察 模式预测,并且要由实际操作这套机组的人复核推荐值。
已发布的 missionpack-knn:v1.6.5 不包含 SDM630 模板、回滚协调器和告警 envelope。在 v1.6.5 上,
观察模式的子步骤仍然适用,但电表、回滚和告警三组子步骤无法完成。
有哪些接口
部署暴露出来的一切都在网关主机的一个 HTTP 端口后面。不开启北向上送时,没有任何数据离开现场网段。
- 运维人员——
8280上的浏览器控制台:带逐点质量的点位总表、电表注册、预测运行、命令回执、告警 横幅。 - 监控系统——
GET /system/runtime-metrics。启用北向上送时包含northbound.spool.queued与northbound.spool.dropped;调试步骤要求确认queued回到 0 且dropped没有增长。 - 自建系统——同样在
8280后面的控制台 API 面,以及部署启动时等待的健康检查接口。
完整的端口与路径
| 端口 / 路径 | 提供什么 | 需要外网 |
|---|---|---|
8280 / | 浏览器控制台 | 否 |
8280 /system/runtime-metrics | 运行计数、北向 spool 计数 | 否 |
8280 /api/v1/health | 健康检查;启动允许 30 秒 | 否 |
4841 | 内置 OPC UA 模拟器,用于演练 | 否 |
命令回执看读回列:protocol_acknowledged 只表示控制器接受了这一帧。读回那一列(已读回 / 一致,
或 不一致已补偿 并带上现场读到的值)才是现场实际持有的值。回滚协调器下发的补偿命令以独立回执紧跟
在被撤销的那条写入之后,审计记录按顺序读即可,不需要关联两张表。
容器日志按 10 MB 轮转、保留 4 份(docker logs missionpack_knn)。命令审计记录、回滚日志和告警历史
要在被轮转掉之前导出。
南向协议能力
所有点位落在同一个注册表里,上限 2,000 个点位,其中最多 50 个可写。SDM630 的 10 个电表点位是只读的,计入 2,000,不占用 50。
| 传输 | 角色 | 约束 |
|---|---|---|
| OPC UA | 暖通控制器的读与写 | 地址按部署配置;内置模拟器在 4841 |
| Modbus TCP | 电表与控制器 | 从站地址与端口按数据源配置;直连或经 TCP 网关 |
| Modbus RTU(RS-485) | 电表 | 需要串口设备部署配置;标准配置不挂载主机串口 |
| BACnet/IP | 空调机组的读与写 | 写入带优先级并用 Null 释放。未实现 COV 订阅、BBMD 注册和 MS-TP |
性能与实测数据
以下数据都是对协议模拟器实测,经本机回环,没有建筑现场数据;除非另有说明均为单次运行。
容量
| 指标 | 数值 | 条件 |
|---|---|---|
| 采集吞吐 | 349.99 events/s(目标 350.0 的 99.99%) | 2,000 点位,4 个协议源 |
| 预测速率 | 0.939 cycle/s | 同一次运行 |
| 进程组 RSS 峰值 | 217.3 MiB | 同一次运行 |
三行共同的条件:4 个协议源共 2,000 个点位,OPC UA 与 Modbus 采集周期 5 秒、BACnet 10 秒,仅本机回环,运行 180 秒,设备为 reComputer R2000 系列(arm64)。
复现:上游 b5fe4cc,采集记录 capacity-smoke r14
时延
| 指标 | 数值 | 条件 |
|---|---|---|
| 预测周期时延 | 最大 46.27 ms | n = 4 个周期,未带载 |
| 控制准入时延 | 最大 1.41 ms | n = 2 个周期,未带载 |
两项只反映代码路径本身的耗时。
复现:上游 f831bae,northbound-smoke 的 runtime 基线
运行时与关键参数
预测模型是 KNN,用这栋楼自己的历史运行记录训练(CSV 或 Excel,含时间、设定值、实测温度和用电量列);服务是 x86-64 或 arm64 上的 Docker 负载。每条预测在下发到控制器之前都可以在控制台里查看。
- 控制模式与安全限值:控制模式出厂为
observe,不改就不写入任何点位。设定值下限 / 上限 18 / 30 °C、最大变化量 1.0 °C / 300 秒、模式白名单 off / fan / cool / heat / auto 都是占位值,按机组填写。 - 写回核实默认关闭:预测运行配置(在控制台里创建)要显式写上
"rollback": { "enabled": true, "settle_seconds": 2.5 },缺少rollback段时按enabled: false处理。 settle_seconds(0–30,默认 1.0)必须大于数据源的采集周期,否则读回拿到的是写入之前的值,会报出一次并不存在的不一致。
已知退化
- 预测速率有结构上限(未修复):预测循环是「跑完一个 cycle 再固定 sleep」,速率是
1/(1.0 + t_cycle)。2,000 点规模下t_cycle约 0.119 秒,上限落在 0.894 cycle/s 附近,低于长稳测试要求的 0.90 门槛。 - 只有 Modbus 点位的写入会被读回核实:BACnet 输出没有写入优先级可用,被跳过。
- 字节序:用电表本机显示核对之前,电表点位按厂商默认字序(大端)解析,数值可能不对。
下一步
- 在 reComputer R10 系列或 reTerminal DM 上接真实设备,做 OPC UA、Modbus TCP、Modbus RTU(USB 转 RS-485)与 BACnet/IP 的读写与独立读回。
- 在同类目标主机上跑 72 小时无人值守运行,期间做网络、Broker、进程与设备恢复演练。
数据与素材出处
- SDM630 寄存器映射——依据 Eastron 公开的 Modbus 协议文档(Modbus V2 寄存器映射,IEEE-754 float32 输入寄存器)。地址按该文档实现;大端字节序与字序是厂商默认值。
- 历史运行数据——由部署现场自行提供。包里不分发任何数据,也不需要公开数据集。
- 控制台截图——对接包内自带协议模拟器运行的打包软件所做的原始屏幕截图。模拟器配置、采集主机与
校验和记录在包内的
gallery/ATTRIBUTION.md。不含任何第三方素材、品牌标识或图库图片。 - 架构图——按结构化架构 IR 绘制,原创,无第三方美术素材。

