第二章:数据基础——SCADA、测风塔、气象与电网调度数据的获取与清洗

各位同行,大家好。欢迎来到实战课程的第二讲。

做风电后评估,说白了就是跟数据打交道。你想想看,如果数据本身都是脏的、乱的、缺的,那后面算出来的发电量、效率指标,能信吗?

我个人习惯,拿到一个风电场项目,第一件事不是急着算指标,而是先花至少一半的时间去梳理数据。嗯,这一步做扎实了,后面才能稳。

2.1 四大数据源,缺一不可

风电场后评估,我们主要依赖四类数据。我管它们叫“四驾马车”,少一个都不行。

数据源 核心作用 常见格式
SCADA数据 单机运行状态、发电量、故障记录 .csv, .xlsx, 数据库
测风塔数据 风资源代表值、切变、湍流 .csv, .txt, .dat
气象数据 长期订正、极端天气分析 .nc, .grib, .csv
电网调度数据 限电、停机、考核 .xlsx, .pdf, 调度系统导出

我在项目中遇到过,有的同事只盯着SCADA数据,忽略了测风塔的异常,结果算出来的发电量偏差很大。后来一查,是测风塔的超声波风速计被冻住了,数据全是0。所以,四类数据必须交叉验证。

2.2 SCADA数据:最核心,也最头疼

SCADA数据是风机的“黑匣子”。它记录了每一台风机每10分钟的平均值、最大值、最小值、状态码。

获取方式

  • 直接从风电场中控室导出
  • 通过OPC接口实时采集
  • 从风机厂家远程平台下载

清洗要点

  • 时间戳对齐:不同风机的时间可能不同步,我习惯统一转为UTC+8,再按整10分钟对齐。
  • 状态码过滤:停机、限电、故障、维护等状态要打标签。千万别把停机时的0功率当成正常数据。
  • 异常值剔除:比如风速超过切出风速但功率不为0,或者功率为负值(风机在耗电)。

核心原则:SCADA数据清洗,不是删得越多越好。要保留“真实”的异常,比如电网波动导致的功率骤降,那是分析限电损失的重要依据。

2.3 测风塔数据:风资源的“标尺”

测风塔是风电场最贵的传感器。它的数据质量,直接决定了风资源评估的准确性。

获取方式

  • 现场数据采集器下载(Campbell, NRG等)
  • 远程传输(GPRS/卫星)

清洗要点

  • 扇区剔除:塔影效应、叶片遮挡会导致某些风向的数据失真。我一般会剔除塔影区(±30°)的数据。
  • 垂直切变检查:不同高度的风速比应该在合理范围内。如果80m风速比50m还低,那大概率是传感器故障。
  • 结冰处理:北方风电场冬季常见。当温度低于0℃且湿度大于90%时,风速数据可能冻结。我曾经处理过一个项目,整个冬季的测风塔数据都是平的,后来加了加热传感器才解决。

小技巧:测风塔数据建议保留原始10分钟数据,不要轻易平均成小时数据。因为风资源的波动性,10分钟数据能捕捉到更多细节。

2.4 气象数据:长期趋势的“校正器”

气象数据主要用于长期订正。因为测风塔只有1-3年的数据,而风电场要运行20年,我们需要用气象站的长序列数据来修正。

获取方式

  • ERA5再分析数据(免费,全球覆盖)
  • MERRA-2数据
  • 当地气象站实测数据

清洗要点

  • 空间匹配:气象网格点(比如ERA5是0.25°×0.25°)与风电场位置的距离,最好在50km以内。
  • 时间匹配:气象数据通常是小时级,需要插值到10分钟,或者直接按小时聚合。
  • 异常值处理:比如ERA5的10m风速偶尔会出现负值,直接剔除即可。

注意:气象数据只能用于趋势分析,不能直接用于功率曲线验证。因为气象网格的风速与风机轮毂处的风速,差异可能很大。

2.5 电网调度数据:限电分析的“铁证”

电网调度数据是分析限电损失的关键。没有它,你算出来的发电量可能比实际高很多。

获取方式

  • 调度中心下发的限电指令(PDF或Excel)
  • 风电场AGC系统记录
  • 电网考核系统导出

清洗要点

  • 时间对齐:调度指令的时间精度通常是15分钟或1小时,需要与SCADA的10分钟数据对齐。
  • 限电类型区分:是全场限电,还是单机限电?是计划性限电,还是故障性限电?
  • 数据补全:有时候调度数据缺失,我会用SCADA的功率与理论功率的差值来反推限电量。

2.6 数据清洗实战流程

好了,理论讲完了。咱们来点实际的。下面是我常用的数据清洗流程,用Python实现。

import pandas as pd
import numpy as np

# 读取SCADA数据
df = pd.read_csv('scada_10min.csv', parse_dates=['time'])

# 1. 时间戳对齐
df.set_index('time', inplace=True)
df = df.resample('10T').mean()  # 重采样到10分钟

# 2. 状态码过滤
valid_status = [1, 2, 3]  # 正常运行、发电、待机
df = df[df['status'].isin(valid_status)]

# 3. 异常值剔除
# 风速在0-30m/s之间,功率在0-额定功率之间
df = df[(df['windspeed'] >= 0) & (df['windspeed'] <= 30)]
df = df[(df['power'] >= 0) & (df['power'] <= 2000)]  # 假设额定功率2000kW

# 4. 缺失值处理
# 连续缺失不超过2个点,用线性插值
df = df.interpolate(method='linear', limit=2)

# 5. 保存清洗后的数据
df.to_csv('scada_cleaned.csv')

这段代码看起来简单,但实际项目中,你可能会遇到各种奇葩情况。比如,有的风机时间戳是字符串格式,有的功率单位是kW有的是MW,有的风速传感器坏了输出全是0。嗯,这些都需要你手动去排查。

2.7 数据质量评估指标

数据清洗完了,怎么判断质量好不好?我一般用这几个指标:

指标 计算公式 合格标准
数据完整率 有效数据点数 / 理论数据点数 > 95%
数据有效率 剔除异常后的数据点数 / 原始数据点数 > 90%
时间同步率 时间戳对齐的数据点数 / 总数据点数 > 98%

如果完整率低于80%,我建议你直接找现场运维要原始数据,或者检查数据采集系统是不是出了问题。

2.8 本章知识体系

下面这张图,是我自己总结的数据清洗逻辑框架。你一看就明白了。

风电场数据清洗知识体系 SCADA数据 测风塔数据 气象数据 电网调度数据 步骤1:时间戳对齐与重采样 步骤2:状态码过滤与异常值剔除 步骤3:缺失值插补与扇区剔除 步骤4:多源数据交叉验证 高质量清洗数据集 完整率 > 95% 有效率 > 90%

这张图把整个流程串起来了。从四大数据源出发,经过四个清洗步骤,最终得到高质量数据集。每一步都有对应的质量指标来把关。

好了,这一章的内容就到这里。数据清洗是后评估的基石,你花多少功夫在上面,后面的分析结果就有多可靠。下一章,我们会进入功率曲线分析,那才是真正考验技术的地方。


专注资料整理