2、气象数据采集:气象站类型、数据采集协议(Modbus/OPC UA)、数据解析与清洗

各位同学,咱们今天聊聊气象数据采集。说实话,这是整个风功率预测系统的“粮草”环节。粮草不到位,后面模型再牛也白搭。我见过太多项目,算法调得天花乱坠,结果一查,气象站数据全是错的——那真是欲哭无泪。

2.1 气象站类型:选对设备,少走弯路

气象站不是随便买个“百叶箱”就完事的。咱们做风电的,要关注的是测风塔地面自动气象站这两大类。

类型 安装位置 测量要素 典型高度 我个人的建议
测风塔 风电场场内 风速、风向、温度、气压 10m / 50m / 70m / 轮毂高度 必须装,这是基准
地面自动站 场站周边 风速、风向、温湿度、雨量 2m / 10m 辅助测风塔,做空间插值
激光雷达 机舱或地面 风廓线、湍流强度 10m~200m 贵,但精度高,适合复杂地形

嗯,这里要注意一点:测风塔的传感器必须定期标定。我曾经在内蒙古一个项目上,发现风速数据连续三个月偏低,排查到最后,是风速计轴承进了沙尘。你想想看,这种数据喂给模型,预测能准吗?

2.2 数据采集协议:Modbus 与 OPC UA 怎么选?

设备选好了,怎么把数据拿回来?这就涉及到通信协议了。目前风电行业最常用的就两个:ModbusOPC 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 数据解析与清洗:从原始数据到可用数据

数据拿到手了,但别高兴太早。原始数据里什么妖魔鬼怪都有:通信中断、传感器故障、野值、时间戳错乱……

我总结了一套“三步走”的清洗流程:

  1. 格式解析:把 Modbus 或 OPC UA 的二进制流转成物理量
  2. 质量检查:范围检查、变化率检查、一致性检查
  3. 缺失处理:插值、标记、或丢弃

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

说了这么多,我画了一张图,帮你把整个气象数据采集的逻辑串起来。你看一眼就明白了:

气象数据采集知识体系 气象站设备 测风塔 / 自动站 / 激光雷达 采集协议 Modbus / OPC UA 数据清洗 解析 / 质检 / 插值 设备选型要点 • 轮毂高度必须测 • 传感器定期标定 • 冗余配置(双风速计) • 防雷、防沙尘 • 数据记录仪选型 协议选择对比 • Modbus:简单、实时 • OPC UA:安全、跨平台 • 小场站用 Modbus • 大场站用 OPC UA • 注意寄存器地址偏移 清洗流程 ① 格式解析 ② 范围检查 ③ 变化率检查 ④ 时间戳对齐 ⑤ 缺失值插值

小技巧:我习惯在数据清洗阶段,把每一步的清洗结果都存一份日志。比如“2024-01-15 14:32:17 风速 99.9 m/s 被标记为野值”。这样回头排查问题时,有据可查。

好了,气象数据采集这块就聊到这儿。记住一句话:垃圾进,垃圾出。数据质量决定了预测精度的天花板。下一节咱们会聊数值天气预报数据的接入,那又是另一番天地了。


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