4. 数据采集与监控(SCADA)设计

SCADA 系统,说白了就是微电网的「眼睛」和「耳朵」。没有它,你连光伏板发了多少电、储能电池还剩多少容量都搞不清楚。我做了这么多年能量管理系统,最深的体会就是:SCADA 搞不好,上层优化全是瞎扯

这一节,咱们就聊聊 SCADA 系统的架构怎么搭、数据模型怎么建、采集频率怎么定、历史数据怎么存。嗯,都是实战中踩过坑才总结出来的东西。

4.1 SCADA 系统架构

我个人习惯把 SCADA 架构分成三层:站控层通信层间隔层。你想想看,微电网里设备那么多——光伏逆变器、储能 PCS、充电桩、并网开关……总得有个清晰的层级来管理它们。

核心原则:间隔层负责「采」,通信层负责「传」,站控层负责「管」。各司其职,互不干扰。

下面这张图是我常用的 SCADA 架构,你可以参考一下:

站控层 SCADA 服务器 | 操作员站 | 历史数据库 协议:IEC 61850 / Modbus TCP 通信层 通信管理机 | 交换机 | 协议转换器 协议:IEC 104 / DNP3 / MQTT 间隔层 光伏逆变器 | 储能PCS | 充电桩 | 智能电表 协议:Modbus RTU / CAN / 私有协议 管理层 传输层 设备层

我在实际项目中遇到过一个问题:某微电网现场有 30 多台逆变器,全部用 Modbus RTU 走 RS485 总线。结果呢?采集周期长达 10 秒,上层 EMS 根本没法做实时控制。后来我改成每台逆变器单独走 Modbus TCP,采集周期直接降到 1 秒以内。所以啊,通信层的设计一定要考虑带宽和实时性

4.2 遥测遥信数据模型

数据模型这块,说白了就是定义「采集什么」和「怎么存」。我一般把数据分成两大类:遥测遥信

  • 遥测(YC):连续变化的模拟量。比如电压、电流、功率、频率、SOC。
  • 遥信(YX):离散的状态量。比如开关分合、保护动作、设备告警。

你想想看,一个微电网少说也有几百个遥测点、上千个遥信点。如果不建好模型,后期维护就是灾难。我习惯用下面这种表格来定义数据点:

点号 名称 类型 单位 量程 采集周期 存储策略
YC_001 光伏总功率 遥测 kW 0~500 1s 实时+分钟
YC_002 储能SOC 遥测 % 0~100 5s 分钟+小时
YX_001 并网开关状态 遥信 - 0/1 变化触发 事件记录
YX_002 逆变器故障告警 遥信 - 0/1 变化触发 事件记录

小技巧:点号命名最好带前缀,比如 PV_YC_001 表示光伏遥测点 001。这样一看就知道是哪个设备的什么数据,省得后期查半天。

4.3 数据采集频率设计

采集频率怎么定?这个问题我经常被问到。其实没有标准答案,得看你的业务需求。但我可以给你一个参考:

  • 电气量(电压、电流、功率):1~5 秒。用于实时监控和闭环控制。
  • 状态量(开关、告警):变化触发。别用轮询,浪费带宽。
  • 环境量(温度、辐照度):30 秒~5 分钟。变化慢,没必要高频采集。
  • 电度量(累计 kWh):15 分钟。符合电网结算要求。

我曾经在一个项目中,把所有数据都设成 1 秒采集一次。结果呢?通信管理机 CPU 直接跑满,丢包率高达 20%。后来我调整了策略:关键数据高频采,非关键数据低频采,问题就解决了。

注意:采集频率不是越高越好。频率太高,通信带宽和存储压力都会剧增。我见过有人把温度也设成 1 秒采集,纯属浪费资源。

4.4 历史数据存储策略

历史数据存储,说白了就是「存多久」和「怎么存」。微电网运行一年,数据量轻松上 TB。如果不做策略,硬盘很快就满了。

我常用的策略是分级存储

  1. 实时库:存最近 1 小时的数据,1 秒一个点。用于实时展示和短期分析。
  2. 分钟库:存最近 30 天的数据,1 分钟一个点。用于日分析和周分析。
  3. 小时库:存最近 1 年的数据,1 小时一个点。用于月分析和年分析。
  4. 日库:存长期数据,1 天一个点。用于年度对比和趋势分析。

你想想看,如果所有数据都按 1 秒粒度存一年,那得多少存储空间?我算过一笔账:一个 100 个遥测点的微电网,1 秒存一次,一年就是 100 × 86400 × 365 ≈ 31.5 亿条记录。这还不算遥信和事件数据。所以啊,分级存储是必须的

我的建议:用时序数据库(比如 InfluxDB、TimescaleDB)来存历史数据。关系型数据库处理海量时序数据效率太低,我踩过这个坑。

下面是一个简单的存储策略配置示例:

// 存储策略配置(伪代码)
{
  "实时库": {
    "粒度": "1s",
    "保留周期": "1h",
    "存储引擎": "内存数据库"
  },
  "分钟库": {
    "粒度": "1min",
    "保留周期": "30d",
    "存储引擎": "时序数据库"
  },
  "小时库": {
    "粒度": "1h",
    "保留周期": "365d",
    "存储引擎": "时序数据库"
  },
  "日库": {
    "粒度": "1d",
    "保留周期": "永久",
    "存储引擎": "关系数据库"
  }
}

嗯,SCADA 设计这块内容不少,但核心就三点:架构要分层、模型要规范、存储要分级。把这三点做好了,后面的 EMS 上层应用才能跑得稳。


专注资料整理