模拟风电数据日志分析设计
一、风电数据分析:
1.提取数据项
风机在运行中产生的数据种类多样,数量巨大,有测风数据、电量指标,以及
箱变系统、变桨系统、偏航系统和齿轮箱各个设备部件的运行状态和故障信息
等等。由于风电机组中的环境、工况、状态参数具有一定的复杂、多变的特性,
且各参数之间相互关联,我们可以利用大数据手段,从海量的数据中挖掘出影
响风机正常运行的关键因素,提升风机发电量,并对频繁发生故障的部件进行
预警,降低运维成本。
以提高发电量一项来说。提高发电量是复杂的系统工程,因为它会受到影响的
因素非常多。比如主控参数优化,参数设置、偏航优化和变桨优化,需要整体
考虑才能得到理想的结果,得到更高的产能和利润。这就需要对风机产生的数
据进行整体性、联动性分析,而这就是大数据技术的用武之地了。
提取将处理数据项:风速、电量
2.风电数据用途
(1)集控
(2)发电量统计、能效分析等 BI 场景
(3)设备健康状况监控和监测
(4)故障关联分析
(5)设备故障预测
(6)业务管理优化
为了支撑这些数据驱动的应用场景,需要整合多维度的生产经营数据以及更细
粒度的秒级、甚至毫米级数据。在风电这种典型的工业大数据场景,数据平台
架构可以基于数据特征进行优化,更加友好的支持实时、并发读写,以及横向
扩展。
3.日志内容
时间序列数据库是比较年轻的数据库,设计实现上更加新颖,如列式存储、REST
API 接口、异步通信、分布式存储等都有广泛使用。
数据模型上,时序数据的字段往往如下定义:
metric:具体的变量名。每个 metric 代表一类度量值,如偏航功率、环
境温度、机舱温度等;
timestamp:时间戳,标识时间维度,可能是秒,也可能是毫秒,作为 KV
数据对中的 key;
Value:变量值。跟时间戳一起组成 KV 数据对,Value 标识具体时间点的
变量值;
TagKey/TagValue:TagKey 和 TagValue 组成一对描述数据的标签,比如
数据是属于哪个风机的,是哪个系统采集的等,通过 tag 补充标注。一个 KV
数据对,可以有无数个 TagKey/TagValue 描述,根据需要扩展完整的数据画像。
OpenTSDB 以 KV 数据库 Hbase 作为存储后端,可满足存储的横向扩展。对
元数据的管理和数据存储上有存储优化的设计,是 Hbase 的一大优势。
1. 通过为每个 metric、tag key 和 tag value 设计一个固定 3byte 的 UID
缩短 Rowkey 的长度;
2. 支持一个时间段内的数据进行整合后存储,如将一小时 3600 个数据点
合并成一个点,来节省 Rowkey 的数量。
Flume:从风场传来的日志文件的监控和收集
Kafka:风机日志文件的缓存和中间结果的保存
flink:风机日志文件的实时获取和预处理
OpenTSDB+Hbase+HDFS:数据的存储和扩展
2.日志设计:
参数:
(1) 系统时间: systemTime= `date +%Y-%m-%d\ %H:%M:%S`
(2) 环境温度: ambientTemperature
(3) 机身温度: fuselageTemperature
(4) 风速: windSpeed
(5) 发电量: powerGeneration
(6) 风机编号:fanNumber
(7) 机型:model
执行脚本自动化模拟数据
版本 1:(吴跟强设计)
[root@master ~]# cat windpower-datas.sh
#!/bin/bash
fanNumber_list=("001" "002" "003")
model_list=("X" "Y" "Z")
ambientTemperature_list=("23" "36" "25.5")
fuselageTemperature_list=("76" "68")
windSpeed_list=("20" "23")
powerGeneration_list=("100" "102")
((i=0))
while [ 1 ]
do
((i++))
#系统时间
systemTime=`date +%Y-%m-%d\ %H:%M:%S`
#风机编号
fanNumber_num=$(((RANDOM%3)))
fanNumber=${fanNumber_list[$fanNumber_num]}
#机型
model_num=$(((RANDOM%3)))
model=${model_list[$model_num]}
#环境温度
ambientTemperature_num=$(((RANDOM%3)))
ambientTemperature=${ambientTemperature_list[$ambientTemperature_
num]}
#机身温度
fuselageTemperature_num=$(((RANDOM%2)))
fuselageTemperature=${fuselageTemperature_list[fuselageTemperatur
e_num]}
#风速
windSpeed_num=$(((RANDOM%2)))
windSpeed=${windSpeed_list[$windSpeed_num]}
#发电量
powerGeneration_num=$(((RANDOM%2)))
powerGeneration=${powerGeneration_list[$powerGeneration_num]}
echo
"$systemTime
$fanNumber
$model
$ambientTemperature
$fuselageTemperature
$windSpeed
$powerGeneration" >>/var/log/windpower/windpower.log
sleep 1;
done
版本 2:(刘晓君设计)
[root@master ~]# cat dataDemo.sh
#!/bin/bash
step=1
RANDOM_MAX_INT=32768
function random_float() {
local scale=2
local min=25
local max=29
j=$((5+${RANDOM}%5))
i=1
my_list=()
while(($i<=j))
do
local
random1=$(
echo
"scale=2;${min}+${RANDOM}/${RANDOM_MAX_INT}*(${max}-${min}+1)" | bc
-l )
my_list[i]=${random1}
let i++
done
current=`date "+%Y-%m-%d %H:%M:%S"`
timeStamp=`date -d "$current" +%s`
#currentTimeStamp=$((timeStamp*1000+`date "+%N"`/1000000))
echo "${timeStamp} ${my_list[*]}" >> /root/dataDemo.log
}
while [ 1 ]
do
random_float
sleep $step
done