一、先把规模算清楚
一座 20MW 工商业分布式电站,典型构成是逆变器 12 到 40 台、组串 300 到 800 串,加上气象站、关口表、并网点电表,再算上储能与充电桩,测点总数落在 3000 到 8000。
按 1 分钟采集频率估算:
- 单站日增记录:5000 × 1440 ≈ 720 万条
- 30 个场站:约 2.16 亿条/日
- 原始量测按每条约 200 字节计算,日增存储约 43 GB
这个量级不适合用单表加索引的方式承载。光伏电站智能运维平台的分区策略、降采样规则和冷热分层必须在设计阶段确定,否则半年后查询会先崩在连接池上。
二、点表模型:让固件升级不返工
点表配置建议以设备型号加固件版本号作为联合键,而不是只用型号。
device_model: INV-X100
firmware: 2.3.1
protocol: modbus_tcp
points:
- code: dc_power
address: 0x0032
type: uint32
scale: 0.1
unit: kW
- code: grid_voltage
address: 0x0041
type: uint16
scale: 0.1
unit: V
- code: fault_word
address: 0x0050
type: bitfield
bits: 16
只用型号做键的风险在于:同一型号换了固件,寄存器地址可能整体偏移。读回来的值依然落在合理区间,不触发任何校验,等到发电量统计出现系统性偏差才被发现。这类错误比读不到数据更难排查,因为它不报错。
版本切换路径固定为四步:新固件上线、拉取点表快照、与上一版本做 diff、差异项确认后切换。diff 结果落库保存,便于回滚对比。固件批量升级时,先在同一型号的一台设备上验证,再推全量。
三、四个数据断点
时钟漂移。 逆变器本地时钟与服务器时间常有分钟级偏差,部分老机型断电后归零。处理方式是采集侧同时记录设备时间与网关时间,服务端以网关时间为准,设备时间偏差单独作为数据质量指标监控。不做这一步,峰谷时段统计会算错,且错的方向随机,报表上看不出规律。
弱网补数。 4G 信号不稳的场站每天可能断连数次,网关本地缓存后补传。服务端必须按设备、测点、时间戳三元组做幂等,否则补传数据会与实时数据叠加,同一时段被计量两次。补数还要加时间窗限制,超过窗口的迟到数据进入异常队列,不直接参与实时统计。
拓扑与台账脱节。 组串换了位置、汇流箱改了接线,台账没更新,诊断模型就会把正常组串判成异常。拓扑要作为可维护数据存在,不能写成初始化时的死配置。
单位与量纲不统一。 有的厂商输出 kW,有的输出 W;有的用功率因数 0.95,有的用百分比 95。接入时必须统一到内部编码,转换规则写在适配层,不要散落在分析代码里。
四、告警:规则、去抖、抑制、聚合
告警规则建议用可配置表达式而不是硬编码判断,规则形如:
when: dc_current < group_avg * 0.6
for: 15m
scope: string
severity: warning
suppress_when: parent_device_offline
四个机制配套使用。
去抖。 连续 N 个采集周期越限才置为触发。N 按测点类型分别配置,电流类可以短,温度类需要更长窗口,否则夏季午后会持续误报。
抑制。 父设备离线时,其下所有子设备告警置为抑制状态,不推送但保留明细。通信中断导致的批量告警本质是一条根因。抑制事件本身要单独记录,因为一段时间的告警空白在事后复盘时是重要信息。
聚合。 同一汇流箱下的同类告警合并为一条根因事件,子告警挂载为明细。运维人员看到"某汇流箱通信中断,影响 18 串",比看到 18 条独立告警更容易判断优先级。
状态机。 用状态机替代布尔值更贴近现场:
- 待触发:规则命中一次。连续 N 次命中转已触发,数据恢复则直接关闭
- 已触发:去抖通过。人工确认转已确认,自动恢复转已恢复
- 已确认:人工确认后派单,转处置中
- 处置中:工单创建。现场处理完成转待验收
- 已恢复:数据恢复正常。验收通过转已关闭
- 已关闭:终态,可被误报归档引用
- 已抑制:父设备离线时进入,父设备恢复后重新计算
每次状态迁移写审计日志,包含操作人、时间与原因。事后追责与规则调优都依赖这份记录。抑制只应作用于有明确父子关系的告警,抑制期间子告警保留为明细而非丢弃,父设备恢复后重新计算,避免把"没报"当成"没坏"。
五、存储与查询
按数据形态分治:量测序列入时序库,告警与工单入关系库,热成像原图与 IV 曲线原始文件入对象存储,库里只留索引与缩略图路径。
分区键建议选站点加设备,按时间做分区裁剪。查询侧加一层降采样,最近一小时保留原始点,超出部分按分钟或小时聚合:
SELECT time_bucket('1 hour', ts) AS bucket,
device_id,
avg(value) AS avg_value,
max(value) AS max_value
FROM measurement
WHERE site_id = :site_id
AND ts >= :start AND ts < :end
GROUP BY bucket, device_id
ORDER BY bucket;
前端直接请求原始点是常见事故点。30 个场站的规模下,长尾查询会把连接池占满,表现是"页面偶尔转圈",从日志里很难定位到具体查询。
六、部署形态与弹性
光伏电站智能运维平台的部署形态要考虑三件事:无状态服务怎么扩容、写入尖峰怎么削、批量与实时怎么隔离。适配服务本身无状态,按接入设备数横向扩容即可。网关侧的配置文件集中下发并版本化,几十个场站各改各的,运维很快失控。
写入侧削峰靠消息队列:分钟级测点在早晚集中上报会形成尖峰,先入队再由消费端批量落库,用队列深度换写入平滑。
批量负载与实时负载要分开。IV 曲线扫描、组串离散率计算、日报月报生成集中在夜间和月初,用独立任务队列触发并限制并发上限,避免与实时写入争抢数据库连接。大屏与报表的渲染请求集中在上班后一小时和汇报前,这部分按实测曲线配置弹性,比按理论峰值预留资源更能控制成本。
七、实施边界
光伏电站智能运维平台有三件事必须留在现场。
接线与点表核对。远程看不到接线错误,也判断不了互感器方向是否装反,只能依靠现场调试记录。
通信链路排查。网关断电、SIM 卡欠费、交换机端口损坏、天线被遮挡,在平台上统统表现为"数据不动"。平台能做的是快速定位到哪一段断了,修复仍需人到现场。
传感器校准。辐照仪偏差会让性能比整体平移,且偏差是系统性的,从曲线上看不出来,只能靠定期标定。
有两件事不宜放在云上。一是实时控制指令下发,有功无功调节、开关分合涉及电气安全,通常由本地控制器或调度侧完成,平台保持只读,或在下发前强制二次确认并留痕。二是财务终账,发票、回款、税务以财务系统为准,平台只提供电量与收益的过程数据。
八、常见问题
问:多品牌逆变器接入需要厂商配合吗?
答:取决于协议开放程度。支持标准 Modbus 或公开 OpenAPI 的型号可以自行适配;仅有私有协议的型号需要厂商提供点表或开放网关。项目启动阶段应先索取协议清单,再评估接入工期。
问:边缘网关断网期间的数据怎么处理?
答:本地缓存加断点续传是常规方案,缓存时长取决于存储容量与上报频率。补传数据必须携带原始时间戳,服务端按设备、测点、时间戳三元组做幂等去重。
问:告警抑制会不会掩盖真实故障?
答:抑制只应作用于有明确父子关系的告警。抑制期间子告警保留明细,父设备恢复后重新计算,并单独记录抑制事件供事后复盘。
问:时序数据要保存多久?
答:量测原始数据通常保留 1 到 3 年,聚合后的日月数据长期保留。具体年限受监管报送要求与存储成本双重约束,可按"原始数据满足故障追溯、聚合数据满足经营分析"的原则设定。