3、风电机组数据采集:传感器类型、数据频率、数据预处理与清洗

大家好,我是老张。在风电行业摸爬滚打了十几年,今天咱们聊聊数据采集这个基础活儿。

很多人觉得数据采集不就是装几个传感器嘛,有啥好讲的?

嗯,我当年也这么想。直到有一次,一个风场的数据质量差到让整个预警模型全部失效,我才意识到——数据采集这个环节,决定了你后面所有工作的天花板。

3.1 传感器类型:你总得知道风在干嘛

风电机组上装的传感器,说白了就三大类:测风的、测电的、测机械状态的。

第一类:测风传感器

  • 风速仪:装在机舱顶部,测风速。常见的有超声波式和机械式。我个人习惯用超声波式,虽然贵点,但机械式在低温结冰时容易卡死,我吃过这个亏。
  • 风向标:测风向,用于偏航控制。注意,风向标的数据要跟风速仪配合着看,单看一个容易误判。
  • 温度/气压传感器:用来修正空气密度,影响功率曲线计算。很多人忽略这个,其实影响不小。

第二类:电气传感器

  • 电流互感器(CT):测发电机定子、转子电流。
  • 电压互感器(PT):测电网侧电压。
  • 功率传感器:直接测有功、无功功率。我建议用双通道的,可以同时测高低压侧,方便做损耗分析。

第三类:机械状态传感器

  • 振动传感器:装在主轴、齿轮箱、发电机轴承上。这是预测性维护的核心数据源。
  • 转速传感器:测叶轮转速、发电机转速。注意,低速轴和高速轴的采样频率要求不一样。
  • 温度传感器(PT100/热电偶):测齿轮箱油温、发电机绕组温度、轴承温度等。我见过一个风场,齿轮箱温度传感器装的位置不对,导致报警总是滞后,差点烧了齿轮箱。
  • 编码器:测桨距角、偏航角度。精度要求高,一般用绝对值编码器。

核心观点:传感器选型不是越贵越好,而是匹配你的数据用途。做功率曲线分析,风速仪精度要0.1m/s级别;做振动分析,加速度传感器频响范围要覆盖0.5Hz-10kHz。

3.2 数据频率:快与慢的博弈

数据频率怎么定?说白了就是看你要分析什么。

低频数据(1Hz - 10Hz)

  • 适用场景:SCADA系统、功率曲线分析、长期趋势监测。
  • 典型数据:风速、功率、温度、压力。
  • 存储量:小,可以存几年。

中频数据(10Hz - 100Hz)

  • 适用场景:变桨控制、偏航控制、电网适应性分析。
  • 典型数据:桨距角、转速、电压电流波形。
  • 存储量:中等,一般存几个月。

高频数据(1kHz - 50kHz)

  • 适用场景:振动分析、轴承故障诊断、齿轮箱状态监测。
  • 典型数据:加速度信号、声发射信号。
  • 存储量:巨大,通常只存触发事件前后的片段。

我的经验:别一股脑全采高频数据。我见过一个团队,把所有传感器都设成100Hz,结果一个月硬盘就满了,数据还全是噪声。合理做法是:低频数据全量存储,高频数据只存特征值或触发片段。

3.3 数据预处理与清洗:脏数据比没数据更可怕

数据采集回来,你以为就能直接用了?

太天真了。真实的风电数据,脏到你怀疑人生。

常见的数据问题:

  • 缺失值:传感器掉线、通信中断、存储故障。
  • 异常值:传感器漂移、电磁干扰、雷击。
  • 重复值:数据重复上报、时间戳错乱。
  • 噪声:高频振动信号里的工频干扰、机械共振。

我的清洗流程(三步走):

  1. 第一步:去重与对齐

    先检查时间戳,去掉重复记录。然后按统一的时间基准对齐。我习惯用UTC时间,避免时区问题。

  2. 第二步:异常值检测

    用3σ原则或IQR(四分位距)方法。但注意,风速、功率这些数据不是正态分布,直接用3σ会误杀。我一般先用分箱法,按风速区间分别做异常检测。

  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 知识体系总览

下面这张图,是我自己梳理的数据采集知识框架,你们可以照着这个思路搭建自己的数据管道:

风电机组数据采集知识体系 传感器类型 数据频率 预处理与清洗 测风类 风速仪、风向标、温压传感器 电气类 CT、PT、功率传感器 机械类 振动、转速、温度、编码器 低频 (1-10Hz) SCADA、功率曲线、趋势 中频 (10-100Hz) 变桨、偏航、电网分析 高频 (1-50kHz) 振动、轴承、齿轮箱诊断 去重对齐 时间戳去重、UTC对齐 异常检测 3σ、IQR、分箱法 缺失处理 线性插值、标记无效 高质量风电数据集

这张图把整个数据采集流程串起来了。从传感器选型,到频率设定,再到清洗预处理,每一步都影响最终数据质量。

总结一句话:数据采集不是装个传感器就完事了。选对类型、定好频率、认真清洗,这三件事做好了,你的风电Agent系统就成功了一半。


公众号:蓝海资料掘金营,微信deep3321