2. 系统总体架构:分层架构设计
大家好,我是老张。今天咱们聊聊储能监控平台最核心的东西——分层架构。
说实话,我见过不少新手一上来就急着写代码,结果写到一半发现数据不知道往哪存,告警不知道往哪发。嗯,这就是典型的「没想清楚架构就动手」。我个人习惯,做任何系统之前,先把分层画清楚。
2.1 为什么一定要分层?
你想想看,一个储能电站里有多少设备?BMS、PCS、温控、电表、消防……每个设备都有自己的协议、自己的数据格式。如果所有代码都揉在一起,那维护起来就是一场噩梦。
分层架构的核心思想:每一层只干一件事,层与层之间通过标准接口通信。这样改一层不影响其他层。
我踩过的坑: 曾经有个项目,开发同学把协议解析和界面展示写在一个函数里。后来换了电表型号,改了一个字段,结果界面崩了三天。从那以后,我强制团队必须分层。
2.2 四层架构详解
储能监控平台一般分四层:感知层、网络层、平台层、应用层。我画了张图,你看一眼就明白了。
2.3 感知层:数据的源头
感知层就是所有硬件设备的集合。说白了,就是那些装在储能柜里、电池架上的各种传感器和控制器。
- BMS(电池管理系统):采集每节电池的电压、温度、电流,计算SOC、SOH。这是最核心的数据源。
- PCS(储能变流器):控制充放电功率,采集交流侧电压、频率、功率因数。
- 温控系统:空调、风扇、液冷机组,采集环境温度、湿度。
- 电表:计量总用电量、发电量,用于收益核算。
- 消防传感器:烟雾、可燃气体、温度异常检测。
我的经验: 感知层最容易出问题的是「数据精度」。有一次现场反馈电压数据跳变,查了两天发现是BMS的采样线接触不良。所以,我建议在感知层就做一次简单的数据有效性校验,比如电压不能超过额定值的120%。
2.4 网络层:数据的血管
网络层负责把感知层的数据传到平台层。这里要考虑几个现实问题:
- 通信协议不统一:BMS用Modbus RTU,PCS用Modbus TCP,电表用DL/T645。网关要做协议转换。
- 网络环境复杂:有的电站在偏远山区,只能用4G;有的在工业园区,有专网。
- 数据可靠性:网络断连时,数据不能丢。我习惯在网关上加本地缓存,网络恢复后补传。
| 协议类型 | 适用场景 | 传输速率 | 可靠性 |
|---|---|---|---|
| Modbus RTU | 串口设备(BMS、电表) | 低速(9600-115200bps) | 高(有线) |
| Modbus TCP | 以太网设备(PCS、空调) | 中速 | 高(有线) |
| MQTT | 物联网设备、云平台 | 中速 | 中(依赖网络) |
| 4G/5G | 远程站点、移动场景 | 高速 | 低(信号影响) |
注意: 网络层最容易忽略的是「心跳机制」。我曾经遇到一个项目,网关死机了,平台端还以为设备正常运行。后来我强制要求:所有设备必须每5秒发一次心跳,平台端超过15秒没收到就告警。
2.5 平台层:系统的大脑
平台层是整套系统的核心。所有数据在这里汇聚、处理、存储。我个人习惯把平台层拆成几个模块:
- 数据接入模块:接收网络层传来的数据,做协议解析、数据清洗。比如把Modbus的原始字节流转成JSON。
- 数据存储模块:时序数据(电压、电流、温度)存到时序数据库(比如InfluxDB、TDengine);设备信息、用户信息、告警记录存到关系数据库(MySQL、PostgreSQL)。
- 告警引擎:根据预设规则判断是否触发告警。比如「电池温度超过55℃」或者「SOC低于10%」。
- 规则引擎:处理联动逻辑。比如「当温度超过45℃时,自动降低充电功率」。
- 设备管理:管理所有设备的注册、配置、固件升级。
核心要点: 平台层一定要做好「数据分级」。实时数据(秒级)走内存队列,历史数据(分钟级)写时序库,报表数据(小时/天级)走离线计算。别把所有数据都往一个管道里塞,否则系统迟早会崩。
2.6 应用层:用户看到的世界
应用层就是用户直接操作的界面。包括:
- 实时监控大屏:展示电站总功率、SOC、充放电状态、关键告警。
- 告警管理:告警列表、告警确认、告警历史查询。
- 数据分析:历史曲线、效率分析、收益统计。
- 远程控制:手动启停、功率设定、模式切换。
- 移动端APP:方便运维人员随时随地查看。
应用层设计时,我特别强调「用户体验」。你想想看,运维人员可能同时管理好几个电站,如果界面操作复杂,他根本不会用。所以,关键信息要一目了然,操作步骤要尽量少。
2.7 数据流与业务流
说完分层,咱们看看数据是怎么在层之间流动的。
数据流(上行方向):
感知层(BMS采集电压25.2V)
→ 网络层(Modbus RTU转MQTT)
→ 平台层(解析、存储、判断是否告警)
→ 应用层(大屏显示25.2V,无告警)
业务流(下行方向):
应用层(运维人员点击「启动放电」)
→ 平台层(校验权限、生成控制指令)
→ 网络层(MQTT转Modbus TCP)
→ 感知层(PCS执行放电指令)
避坑指南: 我曾经遇到一个情况,运维人员点了「停止」按钮,但指令在网络层丢了,PCS没收到。结果电池过放,差点出事故。从那以后,我要求所有下行指令必须有「确认回执」——设备执行完指令后,必须回复「已执行」,平台层没收到回执就重发。
2.8 小结
分层架构不是什么高深的理论,它就是一套「分而治之」的思路。每一层做好自己的事,别越界。感知层只管采集,别管存储;平台层只管处理,别管界面。这样系统才容易扩展、容易维护。
嗯,这一章就到这里。记住这张四层图,后面每一章都会用到它。