2、数据采集与治理基础:SCADA数据、振动数据、气象数据、数据清洗与标准化流程

各位同行,大家好。我是老张,在风电运维这行摸爬滚打了十几年。今天咱们聊点实在的——数据采集与治理。说白了,就是搞清楚我们手头到底有哪些数据,怎么把它们收拾利索了,才能喂给AI模型吃。

很多刚入行的朋友问我:“老张,AI运维是不是特别玄乎?”我通常回答:“不玄乎,但数据要是脏了,AI就是个傻子。” 嗯,这话糙理不糙。我见过太多项目,模型算法再牛,数据一塌糊涂,最后全白搭。

核心观点:数据治理是AI运维的“地基”。地基不稳,楼盖得再高也得塌。我们花80%的精力在数据上,一点都不夸张。

风电数据采集与治理知识体系 数据采集与治理 SCADA数据 振动数据 气象数据 数据清洗与标准化流程 缺失值处理 异常值检测 时间对齐 标准化输出

2.1 三大数据源:我们到底在采集什么?

风电场的AI运维,数据来源主要有三个。我习惯把它们比作“人体的三大系统”:

  • SCADA数据(神经系统): 风机的大脑和神经。记录着每台风机的运行状态、发电量、转速、温度、电压、电流等等。采样频率一般是秒级或分钟级。
  • 振动数据(心跳监测): 专门盯着齿轮箱、轴承、发电机这些旋转部件。采样频率高,通常是kHz级别。说白了,就是听声音判断有没有“心脏病”。
  • 气象数据(天气预报): 风速、风向、温度、湿度、气压。这些决定了风机“吃风”的效率,也是预测发电量的关键。

我的经验: 很多项目只盯着SCADA,忽略了振动和气象。其实三者结合,才能做真正的预测性维护。比如,气温骤降时,振动数据异常往往预示着齿轮箱润滑油出问题。

2.2 SCADA数据:最基础,也最“脏”

SCADA数据是每个风电场都有的。但说实话,我见过太多“脏数据”。

常见问题:

  • 通信中断: 风机和主控室“失联”了,数据直接断档。
  • 传感器漂移: 温度传感器测出来50度,实际只有30度。我遇到过一台风机,连续三个月报“齿轮箱超温”,结果换了个传感器就好了。
  • 人为置零: 有些运维人员为了省事,停机时直接把功率置零,但转速还在转。这种数据喂给AI,模型会学坏的。

SCADA数据字段示例(我常用的):

字段名 说明 单位 常见问题
timestamp 时间戳 yyyy-mm-dd HH:MM:SS 时区不一致、跳变
wind_speed 风速 m/s 负值、超出量程
active_power 有功功率 kW 停机时非零
generator_rpm 发电机转速 rpm 突变、跳变
gearbox_oil_temp 齿轮箱油温 传感器漂移

2.3 振动数据:高频的“心电图”

振动数据是预测性维护的宝贝。但采集起来麻烦,处理起来更麻烦。

为什么?因为采样频率太高了。一个振动传感器,每秒采集几千甚至几万个点。一台风机装好几个传感器,一天下来数据量就是几个GB。

我个人习惯: 振动数据不直接存原始波形,而是提取特征值。比如:

  • 有效值(RMS): 反映振动能量大小。
  • 峰值(Peak): 看有没有冲击信号。
  • 峭度(Kurtosis): 判断有没有早期故障。

避坑指南: 我曾经在一个项目里,直接拿原始振动波形去训练模型,结果模型又大又慢,还容易过拟合。后来改成提取特征值,效果好了不止一个档次。记住,AI不是万能的,别给它喂太多“生肉”。

2.4 气象数据:别信“天气预报”

气象数据看起来简单,但坑也不少。

风电场的气象数据通常来自机舱顶部的气象站。但问题来了:

  • 塔影效应: 机舱上的风速仪,测的是被叶片搅乱后的风,不是自然风。
  • 冰冻问题: 北方冬天,风速仪结冰,数据直接卡死。
  • 数据粒度: 气象局的数据是小时级的,但风机响应是秒级的。直接拿来用,时间对不上。

我的做法: 气象数据一定要做“空间校正”和“时间插值”。说白了,就是把机舱上的风速换算成轮毂高度处的自由风速。这个换算公式,每个机型都不一样,得看厂家手册。

2.5 数据清洗与标准化流程:把“脏活”干漂亮

好了,数据采回来了,接下来就是“洗菜”环节。我总结了一套四步法:

  1. 缺失值处理: 连续缺失超过5%的数据段,直接扔掉。零星缺失,用前后均值或插值法补上。
  2. 异常值检测: 用3σ原则或箱线图。比如风速超过30m/s,功率超过额定值1.2倍,这些明显是错的。
  3. 时间对齐: SCADA是秒级,振动是毫秒级,气象是分钟级。统一重采样到1分钟或10分钟。
  4. 标准化输出: 所有数据归一化到[0,1]或[-1,1]区间。不然风速和温度的量纲不一样,模型会“偏科”。

代码示例(Python,我常用的清洗片段):

import pandas as pd
import numpy as np

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

# 1. 缺失值处理:删除缺失超过5%的列
df = df.dropna(thresh=len(df)*0.95, axis=1)

# 2. 异常值检测:风速不能为负,功率不能超过额定1.2倍
df = df[(df['wind_speed'] >= 0) & (df['wind_speed'] <= 30)]
df = df[(df['active_power'] >= 0) & (df['active_power'] <= 1.2 * rated_power)]

# 3. 时间对齐:重采样到10分钟
df.set_index('timestamp', inplace=True)
df_resampled = df.resample('10T').mean()

# 4. 标准化
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df_scaled = pd.DataFrame(scaler.fit_transform(df_resampled), 
                         columns=df_resampled.columns, 
                         index=df_resampled.index)

小技巧: 清洗完的数据,我习惯存一份“原始清洗日志”。哪天模型效果不好了,回头查查是不是清洗规则出了问题。这招帮我省了不少排查时间。

2.6 标准化:让不同风机“说同一种语言”

标准化不只是数值归一化。更重要的是“业务标准化”。

举个例子:A风机和B风机,型号不同,额定功率不同。A的80%功率和B的80%功率,绝对值不一样,但相对状态是一样的。所以,我建议把功率、转速等参数都换算成“标幺值”(实际值/额定值)。

标准化前后对比:

参数 原始值(A风机) 原始值(B风机) 标幺值
有功功率 1500 kW 2000 kW 0.75 p.u.
发电机转速 1200 rpm 1500 rpm 0.80 p.u.

你看,标幺化之后,不同风机之间的数据就能直接对比了。AI模型学起来也轻松得多。

好了,这一章的内容就到这儿。数据采集和治理是苦活、累活,但也是最有价值的活。把这一步做扎实了,后面的AI模型才能发挥真正的威力。


专注资料整理