第二章:风资源数据采集——测风塔部署、激光雷达原理、SCADA数据接口、数据清洗与预处理
各位同行,大家好。我是老张,在风电行业摸爬滚打了十几年。今天咱们聊聊风资源数据采集。说实话,这是整个数字孪生建模的「地基」。地基没打好,后面建多高的楼都悬。我个人习惯,做项目前先把数据源摸透,不然模型跑出来自己都不信。
2.1 测风塔部署:风资源的「硬核」基准
测风塔,说白了就是一根插在风场里的「大号温度计」,但它测的是风。我见过不少项目,测风塔位置选得随意,结果数据偏差大,后期发电量预测全跑偏。
2.1.1 部署原则
- 代表性:塔位必须能代表整个风场的风况。别放在山坳里,也别紧挨着树林。我建议选在风场主导风向上游的开阔地带。
- 高度匹配:测风高度至少覆盖轮毂高度上下各10米。比如轮毂高80米,那测风塔至少测70米、80米、90米三层。
- 避免遮挡:周围障碍物距离至少是障碍物高度的10倍。嗯,这里要注意,连临时堆放的设备都可能影响数据。
避坑指南:我曾经在内蒙古一个项目上,测风塔旁边有棵孤零零的树,当时觉得没事。结果数据分析时发现,某个扇区的风速总是偏低。后来砍了树,数据才正常。你想想看,一棵树都能影响,何况其他东西?
2.1.2 传感器配置
| 传感器类型 | 推荐数量 | 安装位置 |
|---|---|---|
| 风速计(杯式) | 每层2个 | 水平对置,间隔1.5米 |
| 风向标 | 每层1个 | 与风速计同层 |
| 温度/气压传感器 | 1-2个 | 10米高度处 |
为什么每层要两个风速计?说白了就是为了冗余。一个坏了,另一个还能顶上。我在新疆的项目上,沙尘暴打坏过一个风速计,幸亏有备份,不然那三个月的数据全废了。
2.2 激光雷达原理:从「点测量」到「线测量」
激光雷达,英文叫LiDAR。它跟测风塔最大的区别是:测风塔只能测一个点,激光雷达能测一条线、一个面,甚至一个体积。说白了,它用激光打向空中,碰到气溶胶(灰尘、水滴)反射回来,通过多普勒频移算出风速。
2.2.1 工作原理
激光雷达发射一束激光,频率是f0。激光碰到随风飘动的气溶胶,反射回来的频率变成了f1。f1和f0的差值,就是多普勒频移Δf。风速v和Δf的关系是:
v = (λ * Δf) / 2
其中λ是激光波长。就这么简单?嗯,原理确实不复杂,但工程实现很难。激光雷达内部有精密的光学系统,还要处理信噪比极低的回波信号。
个人经验:我建议在复杂地形(比如山地、沿海)优先用激光雷达。测风塔只能代表一个点,但激光雷达可以扫描整个风场的入流剖面。我在云南一个山地项目,用激光雷达发现了山脊两侧的风速差异,直接优化了机位布局,发电量提升了3%。
2.2.2 类型对比
| 类型 | 测量范围 | 优点 | 缺点 |
|---|---|---|---|
| 连续波(CW) | 10-200米 | 成本低,结构简单 | 无法测远距离 |
| 脉冲式 | 10米-数公里 | 测距远,可扫描 | 成本高,数据处理复杂 |
我个人习惯,做风资源评估时,先用脉冲式激光雷达扫一遍全场,再用测风塔做长期校准。两者结合,数据才靠谱。
2.3 SCADA数据接口:风机的「黑匣子」
SCADA,全称是数据采集与监视控制系统。每台风机上都装着一个SCADA系统,它记录着风机运行的每一秒数据。说白了,它就是风机的「黑匣子」。
2.3.1 数据接口类型
- OPC DA/AE:老牌协议,Windows系统用得多。延迟低,但跨平台麻烦。
- OPC UA:新一代协议,支持跨平台、加密传输。我建议新项目都用这个。
- Modbus TCP:简单粗暴,很多风机控制器原生支持。但数据量大了容易丢包。
- REST API:云平台常用,通过HTTP请求获取数据。延迟稍高,但灵活。
注意:我曾经遇到过一个项目,SCADA数据接口用的是OPC DA,但服务器是Linux系统。结果折腾了两周才搞定兼容性。你想想看,如果一开始就选OPC UA,哪来这些破事?
2.3.2 数据采集频率
| 数据类型 | 推荐频率 | 说明 |
|---|---|---|
| 风速、功率 | 1秒 | 用于动态分析 |
| 温度、压力 | 10秒 | 变化慢,降低存储 |
| 状态、报警 | 事件触发 | 有变化才记录 |
嗯,这里要注意:采集频率不是越高越好。频率太高,数据量爆炸,存储和传输都扛不住。我建议根据分析需求来定。做振动分析,1秒就够了;做功率曲线,10秒也行。
2.4 数据清洗与预处理:把「垃圾」变成「金子」
数据采集回来了,但别急着用。原始数据里全是「坑」:传感器故障、通信中断、异常值……我见过最离谱的,风速计被鸟屎糊住了,数据直接飙到100米/秒。你想想看,这种数据要是直接喂给模型,结果能看吗?
2.4.1 常见数据问题
- 缺失值:通信中断、传感器故障导致数据断档。
- 异常值:超出物理范围的值(比如风速>50m/s)。
- 重复值:同一时间戳出现多条记录。
- 时间戳错乱:时区不对、时钟漂移。
2.4.2 清洗流程
我总结了一套「四步清洗法」,分享给大家:
- 去重:按时间戳排序,删除重复记录。
- 范围检查:风速0-50m/s,功率0-额定功率×1.1。超出就标记为异常。
- 趋势检查:相邻数据点变化率不能太大。比如风速1秒内从5m/s跳到50m/s,肯定是错的。
- 插值填充:缺失值用线性插值或样条插值补上。但注意,连续缺失超过1小时的数据,直接丢弃。
# Python示例:简单的数据清洗
import pandas as pd
import numpy as np
# 读取数据
df = pd.read_csv('wind_data.csv', parse_dates=['timestamp'])
# 去重
df = df.drop_duplicates(subset='timestamp')
# 范围检查
df = df[(df['wind_speed'] >= 0) & (df['wind_speed'] <= 50)]
df = df[(df['power'] >= 0) & (df['power'] <= 2500 * 1.1)]
# 趋势检查
df['ws_diff'] = df['wind_speed'].diff().abs()
df = df[df['ws_diff'] < 10] # 每秒变化不超过10m/s
# 插值填充(缺失不超过1小时)
df = df.set_index('timestamp').resample('1S').asfreq()
df['wind_speed'] = df['wind_speed'].interpolate(limit=3600)
避坑指南:我曾经在清洗数据时,直接用均值填充所有缺失值。结果模型训练出来,预测的风速全是平均值附近,完全没意义。后来改用插值,效果才好。记住:填充方法要跟数据特性匹配。
2.5 本章知识体系
下面这张图,是我自己画的,把本章的核心逻辑串起来了。你一看就明白:数据从哪来、怎么采、怎么洗。
你看,数据从三个源头来:测风塔给基准,激光雷达给空间分布,SCADA给运行状态。经过清洗预处理,最终汇成高质量数据集。这就是数字孪生建模的「原材料」。
好了,这一章就到这里。数据采集是基础,但也是最容易出问题的地方。我建议你动手做一遍清洗代码,跑一遍真实数据,感受一下「垃圾进、垃圾出」的教训。下一章咱们聊风场建模,到时候见。