第二章 系统架构设计:整体架构分层
好,咱们进入第二章。这一章我打算聊聊系统架构。
很多人一上来就撸代码,结果做到一半发现数据上不来,或者设备接不进去。说白了,就是没想清楚架构。我个人习惯,做任何能源管理平台之前,先把架构图画清楚。你想想看,楼宇里几百个传感器、几十台空调、一堆电表水表,没有清晰的层次,后期维护就是噩梦。
2.1 整体架构分层
我把整个平台分成四层:感知层、网络层、平台层、应用层。每一层各司其职,互不干扰。
| 层级 | 核心职责 | 典型组件 |
|---|---|---|
| 感知层 | 数据采集与执行 | 传感器、电表、水表、执行器、PLC |
| 网络层 | 数据传输与协议转换 | 网关、路由器、Modbus、BACnet、MQTT |
| 平台层 | 数据存储与计算 | 时序数据库、消息队列、规则引擎 |
| 应用层 | 业务展示与决策 | 大屏、报表、告警、AI优化 |
2.2 感知层
这是最底层,也是我最头疼的一层。为什么?因为设备太杂了。
我在项目中遇到过,同一个项目里,有BACnet的空调控制器,有Modbus RTU的电表,还有4-20mA模拟量的温度传感器。这些设备的数据格式、通信速率、甚至供电方式都不一样。
核心原则:感知层只做两件事——采集和执行。采集温度、湿度、电流、功率这些数据;执行开关阀门、调节频率这些指令。别在这一层做复杂计算,算力不够,也不稳定。
避坑指南:我曾经在一个项目中,把数据清洗逻辑写在了传感器端的单片机里。结果现场温度一波动,单片机死机了,整个楼的数据都断了。后来我学乖了,感知层只负责原始数据上报,脏活累活交给上层。
2.3 网络层
这一层是桥梁。说白了,就是把感知层那些乱七八糟的协议,统一转换成平台能理解的语言。
我建议网络层重点关注三个点:
- 协议转换:Modbus转MQTT,BACnet转HTTP,这是基本功。网关设备要选支持多协议的,别一个协议配一个网关,机柜都塞不下。
- 数据缓存:网络可能会断。网关本地要能缓存至少24小时的数据,等网络恢复后再补传。我见过太多项目因为网络抖动丢数据,最后能耗分析全是错的。
- 安全加密:楼宇数据虽然不像金融数据那么敏感,但也不能裸奔。TLS加密是底线,别用明文传输。
小技巧:选网关的时候,看看它支不支持远程升级。现场几百个网关,一个个去刷固件,你会崩溃的。
2.4 平台层
这是整个系统的大脑。数据到了这一层,才算真正有了价值。
平台层我一般拆成三个模块:
- 数据接入模块:负责接收网络层上来的数据。这里要用消息队列,比如Kafka或者RabbitMQ。为什么?因为设备上报频率不一样,有的每秒一次,有的五分钟一次。消息队列能削峰填谷,保证系统不被打爆。
- 数据存储模块:楼宇数据是典型的时序数据。别用MySQL硬扛,用InfluxDB或TimescaleDB。我见过有人用MySQL存能耗数据,半年后查询一次要等30秒,那体验太差了。
- 规则引擎模块:比如温度超过28度就开空调,功率超过阈值就告警。规则引擎要支持热更新,改规则不用重启系统。
// 一个简单的规则引擎示例(伪代码)
if (temperature > 28 && hvac_status == 'off') {
sendCommand('hvac_01', 'on');
createAlert('温度过高,已自动开启空调');
}
2.5 应用层
这一层是给用户看的。老板看大屏,工程师看报表,运维看告警。
应用层我强调一个原则:按角色分视图。别把所有功能堆在一个页面上,那叫大杂烩,不叫平台。
- 管理层:看总能耗、趋势图、同比环比。他们关心的是钱。
- 运维层:看设备状态、告警列表、实时数据。他们关心的是故障。
- 分析层:看AI优化建议、能效报告。他们关心的是改进空间。
2.6 技术选型原则
技术选型这事儿,我踩过不少坑。总结下来就三条:
| 原则 | 说明 | 我的经验 |
|---|---|---|
| 成熟优先 | 选社区活跃、文档齐全的技术栈 | 别追新框架,楼宇项目周期长,你走了别人得能接手 |
| 解耦设计 | 各层之间通过API通信,不直接依赖 | 我曾经把感知层和平台层写死在一起,换了个网关,代码全废了 |
| 可扩展性 | 预留20%的性能余量 | 楼宇设备只会越来越多,别把路走窄了 |
2.7 系统边界定义
很多项目做砸了,不是因为技术不行,而是边界没划清楚。
我一般这样定义边界:
- 平台内部:从数据接入到应用展示,这是我们的地盘。
- 平台外部:设备硬件、网络线路、第三方系统(比如物业的OA系统),这些我们只对接,不控制。
- 接口规范:对外提供RESTful API,数据格式统一用JSON。别搞什么XML、SOAP,那都是过去式了。
注意:边界定义一定要写进合同里。我曾经吃过亏,客户说「你们平台要能控制所有设备」,结果发现有些设备是20年前的,连通信接口都没有。最后扯皮扯了三个月。
嗯,这一章就到这里。架构设计是地基,地基稳了,后面盖楼才踏实。下一章咱们聊聊数据采集的具体实现,包括怎么对接Modbus设备、怎么处理脏数据。到时候我会拿一个真实项目里的案例来讲,保证干货满满。
公众号:蓝海资料掘金营,微信deep3321