3、风电机组数据采集:传感器类型、数据频率、数据预处理与清洗
大家好,我是老张。在风电行业摸爬滚打了十几年,今天咱们聊聊数据采集这个基础活儿。
很多人觉得数据采集不就是装几个传感器嘛,有啥好讲的?
嗯,我当年也这么想。直到有一次,一个风场的数据质量差到让整个预警模型全部失效,我才意识到——数据采集这个环节,决定了你后面所有工作的天花板。
3.1 传感器类型:你总得知道风在干嘛
风电机组上装的传感器,说白了就三大类:测风的、测电的、测机械状态的。
第一类:测风传感器
- 风速仪:装在机舱顶部,测风速。常见的有超声波式和机械式。我个人习惯用超声波式,虽然贵点,但机械式在低温结冰时容易卡死,我吃过这个亏。
- 风向标:测风向,用于偏航控制。注意,风向标的数据要跟风速仪配合着看,单看一个容易误判。
- 温度/气压传感器:用来修正空气密度,影响功率曲线计算。很多人忽略这个,其实影响不小。
第二类:电气传感器
- 电流互感器(CT):测发电机定子、转子电流。
- 电压互感器(PT):测电网侧电压。
- 功率传感器:直接测有功、无功功率。我建议用双通道的,可以同时测高低压侧,方便做损耗分析。
第三类:机械状态传感器
- 振动传感器:装在主轴、齿轮箱、发电机轴承上。这是预测性维护的核心数据源。
- 转速传感器:测叶轮转速、发电机转速。注意,低速轴和高速轴的采样频率要求不一样。
- 温度传感器(PT100/热电偶):测齿轮箱油温、发电机绕组温度、轴承温度等。我见过一个风场,齿轮箱温度传感器装的位置不对,导致报警总是滞后,差点烧了齿轮箱。
- 编码器:测桨距角、偏航角度。精度要求高,一般用绝对值编码器。
核心观点:传感器选型不是越贵越好,而是匹配你的数据用途。做功率曲线分析,风速仪精度要0.1m/s级别;做振动分析,加速度传感器频响范围要覆盖0.5Hz-10kHz。
3.2 数据频率:快与慢的博弈
数据频率怎么定?说白了就是看你要分析什么。
低频数据(1Hz - 10Hz)
- 适用场景:SCADA系统、功率曲线分析、长期趋势监测。
- 典型数据:风速、功率、温度、压力。
- 存储量:小,可以存几年。
中频数据(10Hz - 100Hz)
- 适用场景:变桨控制、偏航控制、电网适应性分析。
- 典型数据:桨距角、转速、电压电流波形。
- 存储量:中等,一般存几个月。
高频数据(1kHz - 50kHz)
- 适用场景:振动分析、轴承故障诊断、齿轮箱状态监测。
- 典型数据:加速度信号、声发射信号。
- 存储量:巨大,通常只存触发事件前后的片段。
我的经验:别一股脑全采高频数据。我见过一个团队,把所有传感器都设成100Hz,结果一个月硬盘就满了,数据还全是噪声。合理做法是:低频数据全量存储,高频数据只存特征值或触发片段。
3.3 数据预处理与清洗:脏数据比没数据更可怕
数据采集回来,你以为就能直接用了?
太天真了。真实的风电数据,脏到你怀疑人生。
常见的数据问题:
- 缺失值:传感器掉线、通信中断、存储故障。
- 异常值:传感器漂移、电磁干扰、雷击。
- 重复值:数据重复上报、时间戳错乱。
- 噪声:高频振动信号里的工频干扰、机械共振。
我的清洗流程(三步走):
- 第一步:去重与对齐
先检查时间戳,去掉重复记录。然后按统一的时间基准对齐。我习惯用UTC时间,避免时区问题。
- 第二步:异常值检测
用3σ原则或IQR(四分位距)方法。但注意,风速、功率这些数据不是正态分布,直接用3σ会误杀。我一般先用分箱法,按风速区间分别做异常检测。
- 第三步:缺失值处理
短时间缺失(<5分钟)用线性插值。长时间缺失(>1小时)直接标记为无效,不要硬补。我曾经犯过这个错,补出来的数据让模型学出了奇怪的规律。
避坑指南:我曾经接手过一个风场的数据,发现功率曲线在低风速段异常平滑。查了半天,原来是前一个工程师把所有异常点都删了,还用了平滑滤波。结果就是,模型在低风速段完全不准。记住:清洗不是美化,保留真实波动比平滑更重要。
3.4 数据预处理代码示例(Python)
下面是我常用的一个清洗函数,你们可以参考:
import pandas as pd
import numpy as np
def wind_turbine_data_cleaning(df, col_wind='wind_speed', col_power='active_power'):
"""
风电机组数据清洗函数
"""
# 1. 去重
df = df.drop_duplicates(subset='timestamp')
# 2. 按风速分箱做异常检测
df['wind_bin'] = pd.cut(df[col_wind], bins=np.arange(0, 30, 1))
def remove_outliers(group):
q1 = group[col_power].quantile(0.25)
q3 = group[col_power].quantile(0.75)
iqr = q3 - q1
lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr
return group[(group[col_power] >= lower) & (group[col_power] <= upper)]
df_clean = df.groupby('wind_bin', group_keys=False).apply(remove_outliers)
# 3. 短时间缺失插值
df_clean = df_clean.set_index('timestamp')
df_clean = df_clean.resample('10min').mean() # 重采样到10分钟
df_clean = df_clean.interpolate(method='linear', limit=6) # 最多补1小时
return df_clean.reset_index()
提示:实际项目中,我还会加一步——功率曲线合理性校验。比如风速3m/s以下功率应该接近0,风速25m/s以上应该切出。这些物理约束比任何统计方法都可靠。
3.5 知识体系总览
下面这张图,是我自己梳理的数据采集知识框架,你们可以照着这个思路搭建自己的数据管道:
这张图把整个数据采集流程串起来了。从传感器选型,到频率设定,再到清洗预处理,每一步都影响最终数据质量。
总结一句话:数据采集不是装个传感器就完事了。选对类型、定好频率、认真清洗,这三件事做好了,你的风电Agent系统就成功了一半。
公众号:蓝海资料掘金营,微信deep3321