第三章:SCADA数据采集与预处理

大家好,我是老张。在风电运维这行摸爬滚打了十几年,今天咱们聊聊SCADA数据。说实话,很多刚入行的朋友觉得SCADA就是个数据记录器,其实远不止这么简单。

我见过太多项目,数据采集了一大堆,真正能用上的不到三成。为什么?因为预处理没做好。你想想看,垃圾数据进去,再好的模型也白搭。所以这一章,咱们把SCADA数据从采集到预处理,掰开了揉碎了讲清楚。

3.1 SCADA系统架构

SCADA系统,说白了就是风电场的"神经系统"。它负责把每台风机、每个传感器的数据,实时传回控制中心。

典型的SCADA架构分三层:

  • 现场层:风机上的传感器、PLC控制器。我习惯叫它"前线哨兵"。
  • 通信层:光纤、4G/5G、或者卫星通信。负责把数据传回来。
  • 监控层:中控室的服务器、操作员站。数据在这里汇总、展示、存储。

嗯,这里要注意。很多风场为了省钱,通信层用的设备太差。我在内蒙古一个项目遇到过,冬天零下30度,光纤接头冻裂了,数据直接断流。后来我们换了工业级的光端机,才算彻底解决。

核心要点:SCADA架构的可靠性,取决于最薄弱的那个环节。通信层往往是瓶颈。

3.2 数据采集频率与类型

SCADA采集什么数据?这个问题我问过很多学员,答案五花八门。其实归纳起来就三类:

数据类型 典型参数 采集频率
状态量 启停状态、故障代码、并网状态 1秒~10秒
模拟量 风速、功率、转速、温度、振动 1秒~1分钟
累计量 发电量、运行小时数、桨距动作次数 1分钟~1小时

我个人习惯,做机器学习模型时,模拟量用1秒或10秒的数据。为什么?因为风速变化太快,1分钟的平均值会丢失很多细节。你想想看,一个阵风过来,可能就几秒钟的事,1分钟的数据根本抓不住。

但也不是频率越高越好。我记得有个项目,客户要求所有数据都按1秒采集。结果呢?一台风机一天产生800多万条记录,存储成本翻了三倍,模型效果却没提升多少。所以,采集频率要跟你的分析目标匹配

3.3 数据清洗

数据清洗,这是最磨人的活。我常说,做数据清洗的时间,至少占整个项目的一半。为什么?因为SCADA数据太"脏"了。

3.3.1 缺失值处理

缺失值,说白了就是数据"断片"了。原因很多:传感器故障、通信中断、存储异常等等。

处理缺失值,我一般分三步走:

  1. 先判断缺失比例。如果某个参数缺失超过30%,我建议直接扔掉这个特征。别心疼,留着也是祸害。
  2. 再分析缺失模式。是随机缺失?还是连续缺失?连续缺失往往意味着设备故障。
  3. 最后选择填充方法。常用的有均值填充、前向填充、插值法。

我的经验:对于风速、功率这种连续变化的参数,用线性插值效果最好。对于状态量,用前向填充更合理。

# 一个简单的插值示例
import pandas as pd

# 读取SCADA数据
df = pd.read_csv('scada_data.csv')

# 线性插值填充风速缺失值
df['wind_speed'] = df['wind_speed'].interpolate(method='linear')

# 前向填充状态量
df['status'] = df['status'].ffill()

3.3.2 异常值处理

异常值,这是最头疼的。我曾经遇到过一个案例,某台风机的齿轮箱温度突然飙到120度,SCADA报了警。结果一查,是温度传感器被鸟粪糊住了。你说这算不算异常?算,但不是设备异常,是数据异常。

所以,处理异常值之前,先要搞清楚:是传感器坏了,还是设备真出问题了?

常用的方法有:

  • 3σ原则:超出均值±3倍标准差的数据,视为异常。简单粗暴,但有效。
  • IQR方法:四分位距法。对非正态分布的数据更友好。
  • 领域规则:比如风速超过30m/s还发电,这肯定有问题。因为风机早就切出了。

避坑指南:千万不要一刀切地删除所有异常值。我曾经因为删得太狠,把一个齿轮箱早期故障的特征给删掉了,导致模型漏报。后来我学乖了,异常值先标记,再人工复核。

3.4 数据标准化

数据标准化,说白了就是把不同量纲的数据,拉到同一个尺度上。比如风速是0~30m/s,功率是0~2000kW,温度是-20~80度。如果不标准化,机器学习模型会"偏袒"数值大的特征。

常用的标准化方法:

方法 公式 适用场景
Z-score标准化 (x - μ) / σ 数据近似正态分布
Min-Max归一化 (x - min) / (max - min) 数据有明确边界
Robust标准化 (x - median) / IQR 数据有较多异常值

我个人习惯,做风电功率预测时,用Z-score标准化。因为风速、功率的分布,其实挺接近正态的。但如果是做故障诊断,我建议用Robust标准化。为什么?因为故障数据往往包含异常值,Min-Max会被这些异常值"带偏"。

# Z-score标准化示例
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
df[['wind_speed', 'power', 'temp']] = scaler.fit_transform(
    df[['wind_speed', 'power', 'temp']]
)

3.5 知识体系总览

说了这么多,咱们用一张图把SCADA数据采集与预处理的脉络理清楚。这张图是我自己画的,你一看就明白。

SCADA数据采集与预处理知识体系 数据采集 SCADA系统架构 → 现场层 · 通信层 · 监控层 数据清洗 缺失值处理:判断比例 → 分析模式 → 填充 异常值处理:3σ · IQR · 领域规则 数据标准化 Z-score · Min-Max · Robust → 统一量纲,提升模型性能 高质量训练数据 → 机器学习模型

这张图把整个流程串起来了。从数据采集开始,经过清洗、标准化,最后得到高质量的训练数据。每一步都环环相扣,缺一不可。

最后说一句:预处理做得好,模型就成功了一半。别嫌麻烦,这块功夫下到位了,后面会省很多事。


蓝海数据掘金营,专注资料整理