Register
Login
Resources
Docs Blog Datasets Glossary Case Studies Tutorials & Webinars
Product
Data Engine LLMs Platform Enterprise
Pricing Explore
Connect to our Discord channel

pvstring.Rmd 7.9 KB

You have to be logged in to leave a comment. Sign In
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
  1. ---
  2. title: "组串算法说明"
  3. author: "Leo"
  4. date: "12/27/2018"
  5. output: html_document
  6. ---
  7. ```{r setup, include=FALSE}
  8. knitr::opts_chunk$set(echo = TRUE)
  9. ```
  10. # 术语定义
  11. * 检测窗口:算子一次计算中使用的数据在时间上的跨度;
  12. * 计算频率:算子执行的频率;
  13. * 采样频率:检测窗口内,相邻两个数据点在时间上的跨度;
  14. * 计算单元:一组光伏组串形成的彼此独立的计算单位,对于集中式场站,计算单元等价于汇流箱,
  15. 对于分布式场站,计算单元等价于逆变器,计算单元的ID由场站名称、小室编号、
  16. 逆变器(汇流箱)编号组成。
  17. # 基于相关性的组串预警算法
  18. 基于相关性的组串预警算法适用于中长期故障的预警检测。
  19. 输入:DataFrame, 包含一个或多个场站所有计算单元的所有组串在一个时间段内(默认为4个月)的电流值,列包括:时间戳,计算单元ID,组串编号,电流值;
  20. 输出:DataFrame, 列包括:计算单元ID,组串编号,异常标记(0表示正常,1表示异常);
  21. 参数:
  22. * $m_0$: 环比阈值;
  23. * $l_b$: 基准时间窗百分比,默认0.5,即输入数据时间跨度的一半;
  24. * $l_t$: 测试时间窗百分比,默认0.5,即输入数据时间跨度的一半;
  25. ## 计算流程
  26. 首先按 $l_b$ 和 $l_t$ 将输入数据分为基准和测试两部分,分别计算各部分每个计算单元内组串的相关系数,然后计算变化率,如果超过环比阈值,标记为异常,否则标记为正常。具体流程如下:
  27. 1. 将输入数据按计算单元分组,以下均为针对一个计算单元的处理流程。
  28. 1. 取前 $l_b$ 范围内数据,得到基准组数据 $df_b$;
  29. 1. 对 $df_b$ 按天分组,算出每天每个组串的电流平均值 $I_{sd}$;
  30. 1. 计算 $df_b$ 上的组串相关系数向量 $coef_b$:
  31. i. 纵表转横表:组串编号转为列索引;
  32. i. 计算电流相关系数矩阵;
  33. i. 取矩阵每列中位数,得到一个长度为组串数量的向量 $c_t$;
  34. i. 判断向量的极性:取向量中最大值 $max(c_t)$ 和最小值 $min(c_t$)$ 对应的组串的平均电流值,分别为$I_1$ 和 $I_2$,若 $I_1 > I_2$,说明极性为正,否则为负;
  35. i. 极性为负时,使用 $1 - c_t$ 代替 $c_t$,1作为参数可调,以聚类效果好为选择依据;
  36. 1. 取后 $l_t$ 范围内数据,得到测试组数据 $df_t$,用相同方法求得组串相关系数向量 $coef_t$ ;
  37. 1. 计算每个组串的环比变化率 $m_s = \frac{df_t - df_b}{df_b}$,若 $m_s \ge m_0$,标记为异常,否则标记为正常。
  38. # 基于离散率的光伏组串算法
  39. 基于离散率的光伏组串算法适用于短期故障预警。
  40. 计算频率:一天计算3次:10:00, 13:00, 17:00
  41. 采样频率:5min 采一次数据。
  42. 时间范围:07:00 ~ 10:00; 10:00 ~ 13:00; 13:00 ~ 17:00
  43. 参数列表:
  44. * $t_s$: 输入起始时间;
  45. * $t_e$: 输入终止时间;
  46. * $t_f$: 通讯故障最小时长,默认值 30min,不可配置;
  47. * $I_0$: 时间窗起始阈值,默认值 1A,可配置;
  48. * $I_m$: 最高电流值,默认值 12A,不可配置,如果某个组串在时域上的均值大于 $I_m$ (或者小于0),则此组串标记为 通讯故障(前端渲染为灰色);
  49. 输入:
  50. DataFrame, 列包括:
  51. STATION_ID, DEVICE_ID, MONITOR_TIME, VOLTAGE_VALUE, CURRENT_VALUE, POWER_VALUE, TEMPERATURE, IRRADIANCE
  52. 输出:
  53. DataFrame, 列包括:
  54. * 计算单元ID: 字符串;
  55. * 监控时间:datetime;
  56. * 计算结果值:实数型,离散率或者异常标记(-1代表 通讯故障,-2代表 计算单元无有效值);
  57. * 组串状态:字符串,包含此计算单元中所有组串状态(整型,取值范围:0/1/2/3/-3,分别代表 正常,3种异常以及组串无有效值),以空格符分隔;
  58. ## 应用处理流程
  59. 应用处理包括预处理和后处理两部分计算。
  60. 预处理过程将整体输入数据转换为算子输入,执行并行计算,后处理将计算结果组合为整体输出。
  61. 预处理流程:
  62. 1. 按照 $t_s$ 和 $t_e$ 提取指定时间段内的数据;
  63. 1. 根据 `STATION_ID` 和 `DEVICE_ID` 生成 计算单元ID 和 组串编号;
  64. 1. 根据 计算单元ID 对输入数据分组,每个分组作为算子的输入。
  65. 1. 执行并行计算;
  66. 预处理输出(算子输入)格式:
  67. DataFrame, 列包括:
  68. * 组串编号:str
  69. * 采样时间:datetime
  70. * 电流值:float
  71. * 电压值:float
  72. 后处理流程:
  73. 1. 对于每个算子计算结果,添加 计算单元ID 和 监控时间 $t_e$ 两个字段;
  74. 1. 整合在一个 DataFrame 中输出。
  75. ## 算子计算过程
  76. 算子计算过程的输入数据是预处理步骤的输出。
  77. 算子计算过程的输出:DataFrame,列包括:
  78. * 离散度:float
  79. * 组串状态列表:str
  80. 算子计算流程
  81. 1. 若计算单元中所有组串在 $t_f$ 内直流电流和直流电压值不变(对于组串式逆变器还要加上交流电流、交流电压和有功功率),则整个计算单元标记为 通讯故障,计算结果返回 -1;用滑动窗口方法检测值的不变性,滑动步长为 15min;
  82. 1. 对非通讯故障的计算单元,取所有组串在检测窗口内第一个 $I \gt I_0$ 的时刻,作为所有组串的计算起始时间 $t_1$,和当前计算开始时间 $t_2$组成计算区间 $[t_1, t_2]$。如果整个计算区间内没有大于的值,返回值-2,代表此计算单元“无有效值”。
  83. 1. 对非通讯故障的计算单元内的每个组串做如下操作:
  84. 在 $[t_1, t_2]$ 内筛选电流值,如果 $I \notin [-0.5A, 12A]$ 则剔除该条数据;
  85. 如果 $I \in [-0.5A, 0.1A]$ 则置为0;
  86. 如果 $I \in [0.1A, 12A]$ 保留原数据不变;
  87. 如果筛选后无数据剩余,则该组串标记为 -3,表示 组串无数据,不参与后续计算;
  88. 1. 对处理后的每个计算单元,求所有有效组串的电流平均值 $I_{str}$,
  89. 再求计算单元的总体电流平均值 $I_{cal} = \frac{\sum I_{str}}{no. of. strings}$,
  90. 如果 $I_{cal} \lt I_0$,整个计算单元标记为“无有效值”,返回 -2;
  91. 1. 对筛选后剩余的计算单元中的每个组串计算 $[t_1, t_2]$ 上的平均功率 $\bar P_s$:
  92. 首先算出平均电流 $\bar I$ 和平均电压 $\bar V$,$\bar P_s = \bar I \times \bar V$;
  93. 1. 得到计算单元在 $[t_1, t_2]$ 内的功率平均值 $\bar P_{cal} = \frac{\sum \bar P_s}{no. of. strings)}$;
  94. 1. 得到计算单元离散率:$d = \frac{\sqrt{\sum (\bar P_s - \bar P_{cal}) ^ 2 }}{\bar P_{cal}}$,并输出;
  95. 1. 若 $d \ge 20\%$,将此计算单元内 $P_s$ 最小值对应的组串 $s_{Imin}$ 标记为 异常1(界面红色标记);
  96. 若 $10\% \lt d \lt 20\%$,将此计算单元内 $P_s$ 最小值对应的组串 $s_{Imin}$ 标记为 异常2(界面橙色标记);
  97. 若 $5\% \lt d \lt 10\%$,将此计算单元内 $P_s$ 最小值对应的组串 $s_{Imin}$ 标记为 异常3(界面黄色标记);
  98. 若 $d \le 5\%$,将此计算单元内各个组串标记为正常,计算结束。
  99. 1. 重复计算 $d$ 值,直到计算结束,
  100. 1. 收集每轮计算中组串状态变化,整合为空格分隔的字符串,输出到该计算单元的 组串状态 列中。
  101. ## 待确认问题
  102. 1. 不同时间频率(秒级 vs 分钟级)的数据如何处理? —— 庞胜玉
  103. 1. GICS 问题:在第三方应用中如何将用户定义的定时任务保存在平台中,并定时执行 —— 周总
  104. 1. HBase 输入如何定义,需要几个 DAG 图? —— 周总、李虎、李超
  105. 1. 数据筛选功能放在离散率内部还是外部做?——张超、李超、陶老师
  106. 1. 是否使用移动窗口方法检测通讯故障;
  107. 1. 通讯故障的判断方法:若计算单元中所有组串在 $t_f$ 内电流值不变,则整个计算单元标记为通讯故障,
  108. 计算结果返回 -1;采用移动窗口,取 7:00 ~ 13:00 间数据;
  109. 1. 最高电流值 $I_m$ 是否表示超过此值的数据无效?
Tip!

Press p or to see the previous file or, n or to see the next file

Comments

Loading...