EMS 数据底座
数据生命周期
采样上报 -> 质量标记 -> 实时快照 -> 原始时序
|
v
5 分钟 / 小时汇总
|
v
日 / 月 / 年报表
|
v
收益与运营指标
数据分层
| 层级 | 典型数据 | 更新频率 | 使用场景 |
|---|---|---|---|
| L0 原始时序 | 接入中台/边缘网关原始标准通道点 | 秒级至分钟级 | 原始追溯、协议排查、精细曲线 |
| L1 实时快照 | 每个标准指标最近值 | 分钟级或更快 | 驾驶舱、能量流、设备状态 |
| L2 标准历史 | 5 分钟标准化指标 | 5 分钟 | 常规趋势、告警评估、小时聚合 |
| L3 业务报表 | 小时、日、月、年统计 | 批处理 | 运营分析、收益核算、导出 |
| L4 审核版本 | 已发布/已审核报表与收益 | 按结算周期 | 财务对账、审计和归档 |
原始标准通道与标准指标分离。不同厂家可能使用不同通道名、方向和单位,通道映射层将其归一为平台指标,例如 grid.active_power_kw、ess.soc_pct、pv.energy_today_kwh。
数据质量
每个数值都携带 sampleTime 、quality 和 source 信息。质量包括有效、过期、缺失、异常和未知,前端展示时不会将缺失数据静默转为 0。对运营报表而言,数据可信度与数值本身同样重要。
质量判定顺序
- 检查来源是否在线、数据是否成功解析。
- 检查采样时间是否超出允许迟到和未来漂移范围。
- 检查数值类型、单位和物理范围,例如 SOC 必须在 0-100。
- 检查变化率和累计量回拨,识别设备复位或寄存器溢出。
- 检查同类冗余测点和能量平衡,生成一致性告警。
- 将最终质量连同原始值、标准值和判定原因写入处理结果。
不允许的处理
- 不将
null、超时或查询失败转换为 0。 - 不对方向错误的功率简单取绝对值。
- 不用服务器接收时间替代设备采样时间进行结算。
- 不在无标记的情况下插值或补齐正式报表。
- 不因为单点异常直接删除原始数据。
实时查询
- 按租户、公司、电站、设备范围校验请求。
- 优先返回最近采样,同时返回采样时间与数据质量。
- 设备停用、未绑定或超过数据时效时,返回明确原因。
- 对多设备汇总时保留原始质量,避免异常数据稀释后影响经营判断。
实时快照表建议以 (tenant_id, resource_id, metric_code) 唯一,更新时只有采样时间更新或数据质量更优的点才能覆盖当前值。乱序旧点可以进入历史,但不能倒退实时快照。
历史数据与补拉
历史查询支持最大时间范围限制,防止大范围查询挤占在线资源。对停用后重新启用的设备,可创建历史补拉任务,任务保存时间范围、目标设备和预期数据版本。重叠范围会被拦截,任务进度与失败原因可追溯。
游标与水位线
每个接入端点/边缘网关或同步分片保存最近成功游标。任务读取 [cursor, now - safetyDelay] 区间,成功提交后再推进游标。safetyDelay 用于容纳接入中台写入和网络延迟,避免查询刚结束的开放窗口。
补拉任务状态
PENDING -> VALIDATING -> RUNNING -> VERIFYING -> SUCCEEDED
\-> PARTIAL / FAILED / CANCELED
任务记录目标资源、起止时间、原因、创建人、总窗口数、成功窗口数、失败窗口数、数据版本和错误摘要。相同资源的重叠任务默认拒绝或合并,避免重复读取和重复重算。
迟到数据修复
每日低峰期扫描近期已物化窗口,发现数据版本或点数变化时生成迟到修复任务。修复先更新 5 分钟历史,再按依赖顺序重算小时、日、月和收益,不能只改最终金额。
收益计算
收益计算的输入包括发电量、充放电量、上网电量、负荷用电量、电价时段和电站时区。系统保留原始单位和小数精度,计算结果同时附带价格方案版本,便于事后追溯与重算。
时间与时区
数据库内部时间建议使用 UTC 或带偏移量时间,业务日界线按电站 IANA 时区计算。日报不是简单的服务器 00:00-24:00;跨时区站点必须分别切分。价格时段、夏令时、月结和年结均使用同一时间解析组件。
对于 5 分钟窗口,建议统一采用左闭右开区间:[10:00, 10:05)。采样恰好位于 10:05:00 时进入下一窗口,避免重复计数。
单位与精度
| 类型 | 标准单位 | 计算建议 |
|---|---|---|
| 功率 | kW | 保留至少 3 位小数 |
| 电量 | kWh | 累计量差分保留原精度 |
| 电压 | V | 按相别保存,不提前求平均 |
| 电流 | A | 按相别保存,峰值保留时间 |
| SOC/SOH | % | 0-100,保留 1-2 位小数 |
| 温度 | 摄氏度 | 保存原始值和传感器位置 |
| 金额 | 元 | 中间 6 位以上,最终按规则舍入 |
单位转换配置需要版本化。设备由 W 改为 kW 或方向修正时,必须明确生效时间,禁止静默重写全部历史。
保留与清理
- 高频明细按保留策略定期归档。
- 小时、日、月、年汇总数据与明细数据分开保留。
- 删除任务之前保留审计信息和数据归档记录。
- 任何数据清理都不影响电站、设备、告警和收益的主数据。
保留任务按数据层级执行:原始秒级点保留期最短,5 分钟和小时数据更长,已审核月/年报表与审计记录按合规要求长期保存。清理前生成统计和归档记录,执行后验证最小/最大时间和删除数量。
统一数据契约
实时快照、原始点和聚合结果统一采用以下字段语义:
| 字段 | 说明 | 约束 |
|---|---|---|
resourceId | EMS 设备资源 ID | 业务库稳定主键 |
endpointId/edgeId | 自研接入来源 | 用于路由和隔离 |
channelId | 原始通道 | 保留原始大小写 |
sampleTime | 设备采样时间 | 必须带时区或按电站时区解释 |
value/unit | 数值和单位 | 入库前完成单位换算 |
quality | VALID/STALE/MISSING/INVALID/UNKNOWN | 不允许用 0 代替缺失 |
dataVersion | 计算版本 | 重算时递增 |
迟到、重复与乱序
写入使用 (endpointId, edgeId, channelId, sampleTime) 作为幂等指纹;同一指纹重复上报只更新接收时间和质量,不产生重复电量。允许 15 分钟内迟到数据进入增量聚合,超过窗口的点进入补算队列。聚合任务按水位线推进,水位线未前进时不发布“最终”报表。
聚合口径
- 功率类指标使用时间加权平均,峰值保留最大绝对值及发生时间。
- 电量类指标优先使用设备累计量差分,发生回拨时切换为功率积分并标记
ESTIMATED。 - SOC 使用采样点快照,不对跨设备 SOC 直接求和;电站 SOC 采用可用容量加权。
- 负值方向必须在设备模型中声明,报表层禁止临时取绝对值。
功率时间加权
不规则采样不能直接算术平均。对窗口内相邻采样点使用持续时间加权:
平均功率 = Σ(功率值 × 持续秒数) ÷ 窗口总有效秒数
积分电量 = Σ(功率值 × 持续秒数) ÷ 3600
相邻点间隔超过最大允许间隔时,该区间计为缺失而不是继续保持前值。
累计量差分
累计电量正常递增时,窗口电量取末值减首值;设备重启回零、寄存器溢出或更换时,差分出现负值,系统应识别分段并结合功率积分估算,写入 ESTIMATED 和异常原因。
数据血缘与版本
报表行需要反查到输入资源范围、时间窗口、指标版本、价格版本和任务批次。推荐链路:
reportVersion
-> aggregationJobId
-> metricDataVersion + watermark
-> channelMappingVersion
-> bindingVersion
-> pricePlanVersion
版本不是为了重复存储所有数据,而是为了回答“这个数字当时基于什么算出来”。
数据质量评分
报表输出 coverageRate、validPointCount、missingPointCount、estimatedPointCount。建议质量门槛:覆盖率低于 95% 标记“数据不完整”,低于 80% 不生成正式收益,只生成草稿并通知运维。
查询与成本控制
历史 API 默认最多查询 31 天、单设备最多 20 个指标;超过范围返回异步导出任务。所有查询必须带租户和资源过滤条件,禁止在服务层先全量拉取再内存过滤。高频明细采用降采样(1m/5m/1h)返回,用户需要原始点时显式申请。
数据验收指标
| 指标 | 计算方式 | 建议门槛 |
|---|---|---|
| 覆盖率 | 有效时间/目标窗口时间 | 正式报表 >= 95% |
| 新鲜度 | 当前时间 - 最近采样时间 | 实时 P95 < 30 秒 |
| 重复率 | 重复指纹点数/总点数 | < 0.1% |
| 异常率 | INVALID 点数/总点数 | 按设备类型设阈值 |
| 能量平衡偏差 | 平衡残差/总输入能量 | 正常工况建议 < 5% |
| 补拉成功率 | 成功窗口/目标窗口 | > 99% |
排障清单
实时值为空时依次检查绑定是否有效、通道映射是否存在、接入端点是否启用、边缘网关是否在线、Raw Influx 是否有点、查询标签是否匹配、采样是否超出新鲜度。报表不一致时优先比较数据版本、时区、功率方向、累计量回拨、电价版本和覆盖率。
能量平衡:怎么计算、怎么排错
能量平衡用于核验数据一致性和支撑边缘网关控制,不是为了把缺失值补成看似正确的数字。所有测点先转换为统一方向,再在同一个 5 分钟窗口内计算残差;残差超限时标记异常,不篡改原始数据。
统一方向和单位
| 项目 | 统一正方向 | 映射要求 |
|---|---|---|
| 并网点功率 P_grid | 从电网购电为正,向电网送电为负 | 厂家定义相反时在映射层乘以 -1 |
| 光伏功率 P_pv | 发电输出为正 | 优先使用逆变器交流侧 |
| 负荷功率 P_load | 用电消耗为正 | 无直测时只能作为估算值 |
| 储能功率 P_ess | 放电为正,充电为负 | 统一 SOC 和功率单位 |
| 损耗 P_loss | 消耗为正 | 可包含变压器和线路损耗 |
参与计算的功率必须是 kW,采样时间必须在同一窗口。W/kW、不同站点时区和接收时间混用是最常见的假异常来源。
瞬时和电量残差
P_residual = P_grid + P_pv + P_ess - P_load - P_loss
P_base = max(|P_grid| + |P_pv| + |P_ess| + |P_load|, 1 kW)
relativeResidual = |P_residual| / P_base
建议平衡通过条件同时满足:绝对残差不超过 max(额定容量 × 2%, 2 kW),相对残差不超过 5%。应按电站容量、计量精度调整阈值;连续 3 个窗口超限再报警,避免单点乱序造成告警风暴。
窗口电量优先使用累计量差分。没有可靠累计量才使用梯形积分:
E_interval(kWh) = (P_i + P_i+1) / 2 × (t_i+1 - t_i) / 3600
E_grid_import + E_pv + E_ess_discharge
= E_load + E_grid_export + E_ess_charge + E_loss + E_residual
相邻点间隔超过最大允许值,例如 10 分钟时,该区间计为缺失,禁止保持前值继续积分。累计量差分为负时按重启、溢出或换表处理,不能简单取绝对值。
缺少负荷表时
并网、光伏、储能均可信但没有独立负荷表时,页面可以估算:
P_load_estimated = P_grid + P_pv + P_ess - P_loss_assumed
结果必须标记 ESTIMATED,不能作为精确结算或写回真实负荷。若储能或并网测点同样缺失,则返回 MISSING。
能量不平衡排查顺序
- 对照现场表计确认购电、反送、充电、放电的正负方向。
- 检查 W/kW、Wh/kWh、CT/PT 变比;误差接近 1000 倍通常是单位问题。
- 确认所有测点处于同一个 5 分钟桶,没有一条数据已过期。
- 检查未计量支路、离网负荷、变压器损耗和直流耦合设备。
- 检查累计量清零、溢出和更换电表的时间点。
- 修复映射后通过报表补拉重算,不能直接改历史收益。
自研平衡与调度算法:技术亮点
能量平衡不只是报表校验,更是慧知 EMS 判断数据可信、策略可执行和收益可解释的基础算法。平台将并网、光伏、负荷、储能和损耗统一到同一方向体系,在同一个时间窗口内计算功率残差和电量残差,从而识别方向接反、单位错误、计量缺口、采样过期和未纳入支路。
白话讲,能量平衡就是看“电从哪里来、用到哪里去”能不能对上账。如果光伏、储能、负荷和电网数据加起来明显不平,系统不会假装正常,而是提示可能存在方向、单位、计量或采样问题。
平衡残差模型
P_residual = P_grid + P_pv + P_ess - P_load - P_loss
P_base = max(|P_grid| + |P_pv| + |P_ess| + |P_load|, 1 kW)
relativeResidual = |P_residual| / P_base
其中 P_grid 以购电为正、上网为负;P_pv 以发电为正;P_ess 以放电为正、充电为负;P_load 以消耗为正。残差同时设置绝对阈值和相对阈值,避免小站被绝对误差放大、大站被相对误差掩盖。
调度约束模型
储能调度在经济目标之外必须先满足安全约束:SOC 上下限、最大充放电功率、PCS 温度、BMS 告警、反送限制、需量边界和控制互斥。平台将约束抽象为可组合的裁剪器,策略给出目标功率后,统一经过安全边界裁剪,再进入边缘网关本地闭环。
0 <= SOC_t <= 100%
-P_charge_max <= P_ess_t <= P_discharge_max
SOC_t+1 = SOC_t + eta_charge × E_charge / C - E_discharge / (eta_discharge × C)
P_grid_after = P_grid_without_ess - P_ess_target
策略能力
| 策略 | 核心目标 | 算法特征 |
|---|---|---|
| 自发自用 | 提高光伏本地消纳,减少外购电 | 以并网点功率为反馈,动态调节储能吸收或释放 |
| 零反送 | 将反送控制在合同允许范围内 | 反送约束优先级高于经济优化和普通计划 |
| 削峰填谷 | 降低最大需量并获取峰谷价差 | 结合需量阈值、价格时段和 SOC 余量滚动决策 |
| 分时优化 | 在价格曲线下寻找收益更优计划 | 以 15 分钟预测窗口组合负荷、光伏、价格和容量约束 |
| 异常降级 | 数据缺失或设备受限时保持安全 | 策略降级为保守模式,不输出不可验证的高风险指令 |
技术价值
这套算法让平台具备“可解释的智能调度”能力:收益不是黑盒,控制不是拍脑袋,异常也不用全靠人工猜。每个计划都能说明用了哪些数据、受哪些安全边界限制、为什么这样下发、执行后效果怎样。
