3. 数据采集:传感器数据、SCADA系统与气象站数据获取方法
做发电量预测,第一步不是调模型,而是搞数据。我见过太多人一上来就调参,结果数据质量一塌糊涂,模型再牛也白搭。今天咱们就聊聊数据采集这件事——传感器、SCADA系统、气象站,这三块怎么拿数据、怎么避坑。
3.1 传感器数据采集:最基础的“触角”
传感器是发电系统的“神经末梢”。说白了,就是靠它们感知物理世界的状态。光伏板上的温度传感器、风机上的振动传感器、逆变器里的电流传感器……这些都是最原始的数据源。
常见的传感器类型:
- 温度传感器:测量环境温度、组件温度、逆变器温度
- 辐照度传感器:测量太阳辐射强度(光伏必备)
- 风速/风向传感器:测量风速和风向(风电必备)
- 电流/电压传感器:监测电气参数
- 振动传感器:监测设备运行状态
采集协议选择:
| 协议 | 适用场景 | 传输距离 | 实时性 |
|---|---|---|---|
| Modbus RTU | 近距离、有线连接 | 几百米 | 高 |
| Modbus TCP | 远距离、网络环境 | 不限(依赖网络) | 中 |
| OPC UA | 跨平台、安全性要求高 | 不限 | 中高 |
| MQTT | 物联网、低带宽场景 | 不限 | 低(依赖网络) |
3.2 SCADA系统数据获取:电站的“大脑”
SCADA系统,全称是监控与数据采集系统。它把各个传感器的数据汇总起来,再加上控制功能。你想想看,一个风电场几十台风机,每台风机几十个传感器,没有SCADA系统根本管不过来。
SCADA系统能提供什么数据?
- 运行状态数据:启停状态、运行模式、故障代码
- 电气参数:有功功率、无功功率、电压、电流、频率
- 环境参数:温度、湿度、风速(部分SCADA集成气象站)
- 累计数据:发电量、运行时长、启停次数
获取SCADA数据的方式:
- 直接数据库读取:很多SCADA系统使用SQL Server或MySQL,可以直接连数据库取数。但要注意权限问题。
- OPC接口:工业自动化领域的标准接口,支持实时数据读取。我建议优先用OPC UA,安全性更好。
- API接口:部分新系统提供RESTful API,用HTTP请求就能拿数据,比较方便。
- 文件导出:最原始的方式,SCADA系统导出CSV或Excel文件。适合数据量不大的场景。
3.3 气象站数据获取:预测的“外部变量”
发电量预测离不开气象数据。光伏要看辐照度、温度、云量;风电要看风速、风向、空气密度。气象数据来源主要有三种:
1. 现场气象站
在电站现场安装气象站,数据最准确。但成本高,维护麻烦。我建议至少安装一套完整的气象站,包括辐照度计、风速仪、温湿度计、气压计。
2. 数值天气预报(NWP)
从气象局或商业气象服务商获取。比如ECMWF、GFS、WRF模型的数据。这些数据覆盖范围广,但分辨率有限。我习惯用NWP数据做中长期预测(未来3-7天)。
3. 卫星遥感数据
通过卫星云图反演辐照度等参数。适合没有现场气象站的场景。但精度不如现场测量,而且有延迟。
气象数据获取示例(Python):
import requests
import pandas as pd
# 从气象API获取数据(示例使用OpenWeatherMap)
api_key = "your_api_key"
lat, lon = 40.7128, -74.0060 # 电站经纬度
url = f"http://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={api_key}"
response = requests.get(url)
data = response.json()
# 提取关键气象参数
weather_data = {
'temperature': data['main']['temp'] - 273.15, # 开尔文转摄氏度
'humidity': data['main']['humidity'],
'pressure': data['main']['pressure'],
'wind_speed': data['wind']['speed'],
'wind_direction': data['wind']['deg'],
'cloud_cover': data['clouds']['all']
}
df = pd.DataFrame([weather_data])
print(df)
3.4 数据采集的整体架构
下面这张图展示了数据采集的整体流程。从传感器到SCADA,再到数据平台,最后到预测模型。每一步都有需要注意的地方。
3.5 数据质量检查清单
数据拿到手,别急着用。先做一轮质量检查。我总结了一个检查清单:
- 完整性检查:有没有缺失值?时间序列是否连续?
- 一致性检查:不同数据源的数据是否对得上?比如SCADA的功率数据和电表的累计电量是否一致。
- 异常值检查:有没有明显不合理的数据?比如风速100m/s,温度-100°C。
- 时间戳检查:时间是否对齐?有没有时区问题?
- 单位检查:单位是否统一?比如温度是摄氏度还是华氏度?
好了,数据采集这块就聊到这儿。记住一句话:数据质量决定模型上限。下一章咱们聊聊数据预处理,怎么把原始数据变成模型能吃的“干净数据”。