2、气象数据采集:气象站类型、数据采集协议(Modbus/OPC UA)、数据解析与清洗
各位同学,咱们今天聊聊气象数据采集。说实话,这是整个风功率预测系统的“粮草”环节。粮草不到位,后面模型再牛也白搭。我见过太多项目,算法调得天花乱坠,结果一查,气象站数据全是错的——那真是欲哭无泪。
2.1 气象站类型:选对设备,少走弯路
气象站不是随便买个“百叶箱”就完事的。咱们做风电的,要关注的是测风塔和地面自动气象站这两大类。
| 类型 | 安装位置 | 测量要素 | 典型高度 | 我个人的建议 |
|---|---|---|---|---|
| 测风塔 | 风电场场内 | 风速、风向、温度、气压 | 10m / 50m / 70m / 轮毂高度 | 必须装,这是基准 |
| 地面自动站 | 场站周边 | 风速、风向、温湿度、雨量 | 2m / 10m | 辅助测风塔,做空间插值 |
| 激光雷达 | 机舱或地面 | 风廓线、湍流强度 | 10m~200m | 贵,但精度高,适合复杂地形 |
嗯,这里要注意一点:测风塔的传感器必须定期标定。我曾经在内蒙古一个项目上,发现风速数据连续三个月偏低,排查到最后,是风速计轴承进了沙尘。你想想看,这种数据喂给模型,预测能准吗?
2.2 数据采集协议:Modbus 与 OPC UA 怎么选?
设备选好了,怎么把数据拿回来?这就涉及到通信协议了。目前风电行业最常用的就两个:Modbus 和 OPC UA。
2.2.1 Modbus RTU / TCP
Modbus 是老牌协议,简单、可靠、成本低。说白了,就是主站问,从站答。我习惯用 Modbus TCP,因为走以太网,布线方便。
典型场景:测风塔的数据采集器(比如 Campbell CR1000)通过 Modbus TCP 把数据传给场站工控机。
避坑指南:我曾经遇到过一个坑——Modbus 的寄存器地址是 0-based 还是 1-based?不同厂家实现不一样。你写代码时一定要先读设备手册,否则读出来的数据全是乱的。
# Python 示例:通过 Modbus TCP 读取风速
from pymodbus.client import ModbusTcpClient
client = ModbusTcpClient('192.168.1.100', port=502)
client.connect()
# 读取保持寄存器,地址从 0 开始
result = client.read_holding_registers(0, 2, unit=1)
if not result.isError():
wind_speed = result.registers[0] / 10.0 # 假设精度为 0.1 m/s
print(f"当前风速:{wind_speed} m/s")
client.close()
2.2.2 OPC UA
OPC UA 是新一代协议,支持加密、认证、数据模型。说白了,它比 Modbus 更“聪明”。如果你要对接多个厂家的设备,或者需要远程访问,OPC UA 是更好的选择。
典型场景:风机的 SCADA 系统通过 OPC UA 把机舱风速、发电机功率等数据上传到集控中心。
我的经验:如果现场只有一两台测风塔,用 Modbus 就够了。如果是大型风电场,有几十台风机、多个气象站,我建议上 OPC UA。虽然前期配置麻烦点,但后期维护省心太多。
2.3 数据解析与清洗:从原始数据到可用数据
数据拿到手了,但别高兴太早。原始数据里什么妖魔鬼怪都有:通信中断、传感器故障、野值、时间戳错乱……
我总结了一套“三步走”的清洗流程:
- 格式解析:把 Modbus 或 OPC UA 的二进制流转成物理量
- 质量检查:范围检查、变化率检查、一致性检查
- 缺失处理:插值、标记、或丢弃
2.3.1 格式解析
Modbus 读出来的是 16 位整数,怎么变成风速?你得看设备手册。比如风速计输出 0~1000 对应 0~50 m/s,那就要除以 20。
# 解析示例:将原始整数转为物理量
raw_value = 523 # 从 Modbus 读到的原始值
scale_factor = 0.1 # 手册上写的
wind_speed = raw_value * scale_factor # 52.3 m/s
2.3.2 质量检查
这是最关键的环节。我常用的检查规则:
- 范围检查:风速 0~60 m/s,温度 -40~60°C,超出直接标记为无效
- 变化率检查:1 秒内风速变化超过 10 m/s?大概率是传感器故障
- 时间戳检查:数据间隔是否稳定?如果突然跳了 5 分钟,说明通信有丢包
警告:千万不要直接删除异常数据!我曾经犯过这个错——删了一堆“看起来不对”的数据,结果模型训练出来,遇到极端天气就崩。正确的做法是:标记异常,保留原始值,让模型自己学习如何处理。
2.3.3 缺失处理
数据缺失是常态。我常用的方法:
| 缺失时长 | 处理方法 | 适用场景 |
|---|---|---|
| < 10 分钟 | 线性插值 | 短时通信抖动 |
| 10 分钟 ~ 2 小时 | 相邻测风塔数据回归 | 单站传感器故障 |
| > 2 小时 | 标记为缺失,不参与训练 | 长时间停机或维护 |
2.4 知识体系总览
说了这么多,我画了一张图,帮你把整个气象数据采集的逻辑串起来。你看一眼就明白了:
小技巧:我习惯在数据清洗阶段,把每一步的清洗结果都存一份日志。比如“2024-01-15 14:32:17 风速 99.9 m/s 被标记为野值”。这样回头排查问题时,有据可查。
好了,气象数据采集这块就聊到这儿。记住一句话:垃圾进,垃圾出。数据质量决定了预测精度的天花板。下一节咱们会聊数值天气预报数据的接入,那又是另一番天地了。
公众号:蓝海资料掘金营,微信deep3321