3、风电数据采集与接入:SCADA系统介绍、数据采集频率与类型、数据接入方式(CSV、数据库、API)、数据质量初探
各位同行,大家好。今天我们来聊聊风电运维里最基础、也最关键的一环——数据采集与接入。
说实话,我见过太多项目,算法模型建得漂漂亮亮,结果一上线就崩。为什么?数据源没搞清楚,接入方式选错了,或者数据质量一塌糊涂。你想想看,地基没打好,楼盖得再高也是危房。
所以这一章,咱们就把数据采集这件事彻底掰扯清楚。
3.1 SCADA系统:风机的“黑匣子”
SCADA,全称是Supervisory Control and Data Acquisition,也就是监控与数据采集系统。说白了,它就是风机的“黑匣子”,记录着风机从出生到退役的每一个动作。
我个人习惯把SCADA系统比作风机的体检报告。它实时监测着风速、转速、功率、温度、振动、油压……几十甚至上百个参数。没有SCADA,你就像在黑暗中开车,全靠感觉。
我在项目中遇到过一件事:某风场连续三个月发电量不达标,运维团队查了所有机械部件,都没问题。最后我调出SCADA数据一看,发现偏航系统在特定风速区间频繁动作,导致发电效率下降。这就是SCADA的价值——它告诉你“发生了什么”,而不是“你以为发生了什么”。
3.2 数据采集频率与类型
数据不是越多越好,也不是越快越好。关键是要“对”。
SCADA系统通常采集两类数据:
- 状态量:比如风机是运行、停机还是故障。这类数据变化慢,通常每10秒或每分钟记录一次就够了。
- 模拟量:比如风速、功率、温度。这类数据变化快,采集频率要高一些,一般是每秒或每0.1秒一次。
嗯,这里要注意:采集频率不是越高越好。我见过一个项目,把风速采集频率设成了100Hz(每秒100次),结果数据量爆炸,存储成本飙升,但实际分析时根本用不到这么高的精度。白白浪费资源。
给大家一个参考表:
| 数据类型 | 典型参数 | 推荐采集频率 | 说明 |
|---|---|---|---|
| 状态量 | 运行/停机/故障 | 10秒~1分钟 | 变化慢,低频采集即可 |
| 模拟量(慢变) | 环境温度、油温 | 1秒~10秒 | 温度变化有惯性 |
| 模拟量(快变) | 风速、功率、转速 | 0.1秒~1秒 | 这些参数波动大,需要高频采集 |
| 振动数据 | 轴承振动、齿轮箱振动 | 1kHz~10kHz | 用于故障诊断,需要专用采集卡 |
3.3 数据接入方式:CSV、数据库、API
数据采集完了,怎么把它弄到你的分析环境里?这就涉及到数据接入方式。我常用的有三种:CSV、数据库、API。
3.3.1 CSV文件:最原始,也最通用
CSV,说白了就是逗号分隔的文本文件。几乎所有SCADA系统都支持导出CSV。优点就是简单、通用、不依赖任何软件。
但缺点也很明显:
- 文件大了以后,读写速度慢得让人抓狂
- 没有数据校验,容易出错
- 不适合实时分析
我曾经接手一个项目,对方给了我一堆CSV文件,每个文件几百兆。光是读取就花了半小时,更别提分析了。后来我让他们直接导数据库,效率提升了10倍不止。
如果你只是做小规模分析,CSV够用。但如果是生产环境,我建议你跳过这一步。
3.3.2 数据库:工业级的选择
数据库是数据接入的主流方式。常用的有MySQL、PostgreSQL、InfluxDB(时序数据库)等。
我个人比较推荐用时序数据库,比如InfluxDB或TimescaleDB。为什么?因为风电数据天然就是时间序列数据,时序数据库在存储和查询效率上比传统关系型数据库高出一个量级。
举个例子,你要查某台风机过去一年的风速数据。用MySQL可能要跑几分钟,用InfluxDB几秒钟就出来了。
连接数据库的代码示例(Python + PostgreSQL):
import psycopg2
# 连接数据库
conn = psycopg2.connect(
host="192.168.1.100",
database="wind_farm",
user="admin",
password="your_password"
)
# 查询数据
cur = conn.cursor()
cur.execute("SELECT timestamp, wind_speed, power FROM scada_data WHERE turbine_id='T01' AND timestamp > '2024-01-01'")
# 获取结果
rows = cur.fetchall()
for row in rows[:5]:
print(row)
cur.close()
conn.close()
3.3.3 API:现代系统的标配
API,全称是应用程序接口。现在很多新SCADA系统都提供RESTful API,你可以通过HTTP请求直接获取数据。
API的好处是:
- 实时性高,可以做到秒级甚至毫秒级
- 跨平台,任何语言都能调用
- 安全性好,有权限控制
调用API的代码示例(Python + requests):
import requests
import json
# API地址
url = "http://scada-api.windfarm.com/v1/data"
# 请求参数
params = {
"turbine_id": "T01",
"start_time": "2024-01-01T00:00:00Z",
"end_time": "2024-01-02T00:00:00Z",
"fields": "wind_speed,power"
}
# 发送请求
response = requests.get(url, params=params, auth=("username", "password"))
# 解析结果
if response.status_code == 200:
data = response.json()
print(f"获取到 {len(data['records'])} 条记录")
else:
print(f"请求失败,状态码:{response.status_code}")
3.4 数据质量初探:别让垃圾数据毁了你的分析
数据接入进来了,是不是就可以直接分析了?别急,先看看数据质量。
我见过太多人,数据一拉进来就开始跑模型,结果跑出来的结果完全不对。为什么?因为数据里有脏数据。
常见的数据质量问题:
- 缺失值:某个时间点的数据没采集到,或者采集失败了
- 异常值:风速突然变成9999,明显是传感器故障
- 重复值:同一条数据被记录了两次
- 时间戳错乱:数据的时间顺序不对,或者时区没统一
我曾经遇到一个项目,分析结果总是对不上。查了三天,最后发现是SCADA系统的时间戳没有同步,有的风机快了5分钟,有的慢了3分钟。你想想看,时间都对不上,分析结果能对吗?
所以,数据接入后的第一步,永远是数据质量检查。我一般会做这几件事:
- 检查缺失率:缺失超过5%的字段,要标记出来
- 检查取值范围:风速不可能为负,功率不可能超过额定值
- 检查时间连续性:相邻两条数据的时间差是否合理
- 检查重复记录:有没有完全一样的数据行
下面这张图,是我自己总结的数据接入与质量检查流程,大家可以参考:
好了,这一章的内容就到这里。数据采集与接入是风电运维数据分析的第一步,也是最重要的一步。把这一步走稳了,后面的路就好走了。
公众号:蓝海资料掘金营,微信deep3321