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
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
| /**
| * 获取二进制数对应位上的值
| * @param {*} num 处理数
| * @param {*} bit 取值位
| */
| const getBit = function (num, bit) {
| return (num >> bit) & 1;
| }
| /**
| * 获取二进制数中连续多位的结果
| * @param {*} num 处理数
| * @param {*} bitMin 截取最低位
| * @param {*} bitMax 截取最高位
| */
| const getBits = function (num, bitMin, bitMax) {
| let mask = Math.pow(2, bitMax - bitMin + 1) - 1;
| return (num >> bitMin) & mask;
| }
| // 系统工作模式
| const workModel = {
| 1: '离网模式',
| 2: 'P/Q模式',
| 3: '自动运行模式'
| };
| // 系统工作状态
| const sysState = {
| 1: '停机',
| 2: '自检',
| 3: '运行',
| 4: '预留',
| 5: '故障',
| };
| const SYS = {
| dev_id: '设备id',
| sysState: '系统工作状态', // 1:停机;2自检;3运行;4:预留;5:故障
| record_time: '记录时间',
| workModel: '系统工作模式', // 1:离网模式;2:P/Q模式;3:自动运行模式
| activePowerLimitDis: '放电有功功率限值',
| activePowerLimitChar: '充电有功功率限值',
| acUa: '交流A相电压',
| acUb: '交流B相电压',
| acUc: '交流C相电压',
| acIa: '交流A相电流',
| acIb: '交流B相电流',
| acIc: '交流C相电流',
| sysActivePowerSum: '系统当前有功功率和',
| sysReactivePowerSum: '系统当前无功率和',
| sysSoc: '系统SOC',
| runPCSMode: '运行PCS模块数',
| parkPower: '园区功率',
| pcsState1: 'PCS模块1状态',
| pcsState2: 'PCS模块2状态',
| pcsState3: 'PCS模块3状态',
| pcsState4: 'PCS模块4状态',
| sysAlm0: '系统告警信息0',
| sysAlm1: '系统告警信息1',
| sysAlm2: '系统告警信息2',
| sysAlm3: '系统告警信息3',
| sysFault0: '系统故障信息0',
| sysFault1: '系统故障信息1',
| pcsWareTmp: 'PCS仓环境温度',
| battWareTmp: '电池仓环境温度',
| containWareTmp: '集装箱外环境温度',
| battWateHum: '电池仓环境湿度',
| pcsWateHum: 'PCS仓环境湿度',
| containWateHum: '集装箱环境湿度',
| airCondState1: '空调状态1',
| airCondState2: '空调状态2',
| sys_year: '系统时间-年',
| sys_month: '系统时间-月',
| sys_day: '系统时间-日',
| sys_hour: '系统时间时',
| sys_minte: '系统时间-分',
| sys_second: '系统时间-秒',
| auxPowerEle_ref: '辅助供电-输入有功电能参考值',
| auxPowerEle_real: '辅助供电-输入有功电能实际值',
| pcsUIChanges: 'PCS UI变比',
| pcsPQChanges: 'PCS PQ变比',
| pcsUa: 'PCS相电压Ua',
| pcsUb: 'PCS相电压Ub',
| pcsUc: 'PCS相电压Uc',
| pcsUab: 'PCS线电压Uab',
| pcsUbc: 'PCS线电压Ubc',
| pcsUca: 'PCS线电压Uca',
| pcsIa: 'PCS电流Ia',
| pcsIb: 'PCS电流Ib',
| pcsIc: 'PCS电流Ic',
| pcsAActPower: 'PCS A相有功功率',
| pcsBActPower: 'PCS B相有功功率',
| pcsCActPower: 'PCS C相有功功率',
| pcsSumActPower: 'PCS 总有功功率',
| pcsAReaPower: 'PCS A相无功功率',
| pcsBReaPower: 'PCS B相无功功率',
| pcsCReaPower: 'PCS C相无功功率',
| pcsSumReaPower: 'PCS 总无功功率',
| pcsApowerFact: 'PCS A相功率因数',
| pcsBpowerFact: 'PCS B相功率因数',
| pcsCpowerFact: 'PCS C相功率因数',
| pcsSumpowerFact: '总功率因数',
| pcsAAppPower: 'PCS A相视在功率',
| pcsBAppPower: 'PCS B相视在功率',
| pcsCAppPower: 'PCS C相视在功率',
| pcsSumAppPower: 'PCS 总视在功率',
| pcsFreq: 'PCS 频率',
| pcsInActPower_ref: 'PCS 输入有功电能',
| pcsOutActPower_ref: 'PCS 输出有功电能',
| pcsPerReaPower_ref: 'PCS 感性无功电能',
| pcsCapReaPower_ref: 'PCS 容性无功功率',
| pcsInActPower_real: 'PCS 输入有功电能实际值',
| pcsOutActPower_real: 'PCS 输出有功电能实际值',
| pcsCapReaPower_real: 'PCS 容性无功功率实际值',
| pcsPerReaPower_real: 'PCS 感性无功电能实际值',
| };
| const PCS = {
| record_time: '记录时间',
| acUa: '交流A相电压',
| acUb: '交流B相电压',
| acUc: '交流C相电压',
| acIa: '交流A相电流',
| acIb: '交流B相电流',
| acIc: '交流C相电流',
| acActPower: '交流有功功率',
| acReaPower: '交流无功功率',
| acAppPower: '交流视在功率',
| acFreq: '交流频率',
| powerFact: '功率因数',
| macInsTmp: '机内温度',
| maxFlowCharPower: '系统最大允许充电功率',
| maxFlowDiscPower: '系统最大允许放电功率',
| dcVol1: '直流电压1',
| dcCurr1: '直流电流1',
| dcPower1: '直流功率1',
| dcVol2: '直流电压2',
| dcCurr2: '直流电流2',
| dcPower2: '直流功率2',
| dcVol3: '直流电压3',
| dcCurr3: '直流电流3',
| dcPower3: '直流功率3',
| dcVol4: '直流电压4',
| dcCurr4: '直流电流4',
| dcPower4: '直流功率4',
| dcAC1DevRun: 'DCAC1设备运行状态字',
| dcAC1CompFault: 'DCAC1系统综合故障字',
| dcAC1EnvirFault: 'DCAC1系统环境故障字',
| dcAC1HardFault: 'DCAC1系统硬件故障字',
| dcAC1TmpFault: 'DCAC1系统温度故障字',
| dcAC2DevRun: 'DCAC2设备运行状态字',
| dcAC2CompFault: 'DCAC2系统综合故障字',
| dcAC2EnvirFault: 'DCAC2系统环境故障字',
| dcAC2HardFault: 'DCAC2系统硬件故障字',
| dcAC2TmpFault: 'DCAC2系统温度故障字',
| dcAC3DevRun: 'DCAC3设备运行状态字',
| dcAC3CompFault: 'DCAC3系统综合故障字',
| dcAC3EnvirFault: 'DCAC3系统环境故障字',
| dcAC3HardFault: 'DCAC3系统硬件故障字',
| dcAC3TmpFault: 'DCAC3系统温度故障字',
| dcAC4DevRun: 'DCAC4设备运行状态字',
| dcAC4CompFault: 'DCAC4系统综合故障字',
| dcAC4EnvirFault: 'DCAC4系统环境故障字',
| dcAC4TmpFault: 'DCAC4系统温度故障字',
| dcAC4HardFault: 'DCAC4系统硬件故障字',
| };
|
| const battGrpStats = {
| // BattGroupId: '电池组ID',
| record_timed: '记录时间',
| battState: '电池组状态',
| sumVol: '总电压',
| battCurr: '电池组电流',
| battSoc: '电池组Soc',
| battSoh: '电池组Soh',
| maxCharCurr: '最大充电电流',
| maxDiscCurr: '最大放电电流',
| diState: 'DI状态',
| doState: 'DO状态',
| battAlm0: '电池组告警0',
| battAlm1: '电池组告警1',
| battfault1: '电池组故障1',
| battfault0: '电池组故障0'
| };
| const diState = {
| 0: '主接触器',
| 1: '负极接触器',
| 2: '维修开关',
| 3: '隔离开关',
| 4: '急停信号',
| };
|
| const doState = {
| 0: 'DO1',
| 1: 'DO2',
| 2: 'DO3',
| 3: 'DO4',
| 4: 'DO5',
| 5: 'DO6',
| 6: 'DO7',
| 7: 'DO8'
| };
|
| const battAlm0 = {
| 0: '电池单体低压告警',
| 1: '电池单体高压告警',
| 2: '电池组低压告警',
| 3: '电池组高压告警',
| 4: '充电低温告警',
| 5: '充电高温告警',
| 6: '放电低温告警',
| 7: '放电高温告警',
| 8: '电池组充电过流告警',
| 9: '电池组放电过流告警',
| 10: '电池模组低压告警',
| 11: '电池模组高压告警'
| };
| const battfault0 = {
| 0: '电池单体低压故障',
| 1: '电池单体高压故障',
| 2: '电池组低压故障',
| 3: '电池组高压故障',
| 4: '充电低温故障',
| 5: '充电高温故障',
| 6: '放电低温故障',
| 7: '放电高温故障',
| 8: '电池组充电过流故障',
| 9: '电池组放电过流故障',
| 10: '电池模组低压故障',
| 11: '电池模组高压故障'
| };
| const battfault1 = {
| 0: '电压传感器故障',
| 1: '温度传感器故障',
| 2: '内部通信故障',
| 3: '输入过压故障',
| 4: '输入反接故障',
| 5: '继电器检测故障',
| 6: '电池损坏故障',
| 7: '其他故障'
| };
|
| // 系统告警信息0
| const sysAlm0 = {
| 0: 'PCS1通讯中断',
| 1: 'PCS2通讯中断',
| 2: 'PCS3通讯中断',
| 3: 'PCS4通讯中断',
| 4: 'PCS5通讯中断',
| 5: 'PCS6通讯中断',
| 6: 'PCS7通讯中断',
| 7: 'PCS8通讯中断',
| 8: 'PCS9通讯中断',
| 9: 'PCS10通讯中断'
| };
| // 系统告警信息1
| const sysAlm1 = {
| 0: 'BECU1通讯中断',
| 1: 'BECU2通讯中断',
| 2: 'BECU3通讯中断',
| 3: 'BECU4通讯中断',
| 4: 'BECU5通讯中断',
| 5: 'BECU6通讯中断',
| 6: 'BECU7通讯中断',
| 7: 'BECU8通讯中断',
| 8: 'BECU9通讯中断',
| 9: 'BECU10通讯中断'
| };
| const sysAlm2 = {
| 0: '辅助采集器通讯中断',
| 1: '温湿度采集器通讯中断',
| 2: 'IO控制器通讯中断',
| 3: '电表1通讯中断',
| 4: '电表2通讯中断',
| 5: '远程通讯中断',
| 6: 'BMS启动超时',
| 7: 'PCS启动超时',
| 8: '园区电表通讯中断'
| };
| const sysAlm3 = {
| 0: '空调1通讯中断',
| 1: '空调2通讯中断',
| 2: '空调3通讯中断',
| 3: '空调4通讯中断',
| 4: '空调5通讯中断',
| 5: '空调6通讯中断',
| 6: '空调7通讯中断',
| 7: '空调8通讯中断'
| };
|
| const sysFault0 = {
| 0: '所有PCS通讯中断',
| 1: '浸水故障',
| 2: '消防故障',
| 3: '防雷器状态异常',
| 4: '一级火警',
| 5: '二级火警',
| 6: '火探动作',
| 7: 'PCS紧急停机',
| 8: '外部紧急停机',
| 9: '硬件联跳',
| };
|
| const dcAC1DevRun = function (value) {
| let v0 = getBit(value, 0) ? '开机' : '关机',
| v1 = ['未知', '停机', '自检', '并网运行', '离网运行', '', '', ''][getBits(value, 1, 3)],
| v2 = ['待机', '充电', '放电', ''][getBits(value, 4, 5)],
| v3 = ['不降额', '温度降额', '交流电压过低降额', '直流电压过高降额', '', '', '', ''][getBits(value, 6, 8)],
| v4 = getBit(value, 9) ? '主机' : '从机',
| v5 = getBit(value, 10) ? '有故障' : '无故障';
| return [
| '开关机状态: ' + v0,
| '运行状态: ' + v1,
| '充放电状态:' + v2,
| '功率降额状态:' + v3,
| '主从机身份:' + v4,
| '设备故障:' + v5
| ];
| };
|
| const dcAC1CompFault = {
| 0: '锁相告警',
| 1: '直流侧硬件软起故障',
| 2: '交流侧硬件软起故障',
| 3: '直流软件软起故障',
| 4: '电网谐振故障',
| 5: '输入阻抗故障',
| 6: '输入阻抗告警',
| 7: 'CANB 通信异常告警',
| 8: '系统存在地址冲突故障',
| 9: '系统主机存在地址冲突故障',
| 10: '模块地址异常故障',
| 11: 'DC 电压采样故障告警',
| 12: 'AC 电压采样异常告警',
| 13: 'DC 侧主继电器告警',
| 14: '母线中点不均告警',
| 15: '过载告警'
| };
|
| const dcAC1EnvirFault = {
| 0: '正母线二级过压告警',
| 1: '负母线二级过压告警',
| 2: '模组 A1 相过流告警',
| 3: '模组 B1 相过流告警',
| 4: '模组 C1 相过流告警',
| 5: '模组 A2 相过流告警',
| 6: '模组 B2 相过流告警',
| 7: '模组 C2 相过流告警',
| 8: '辅助电源故障',
| 9: '并机 CANA 通信故障',
| 10: '风机 1 故障',
| 11: '风机 2 故障',
| 12: '风机 3 故障',
| 13: '逆变过压告警',
| 14: '逆变欠压告警',
| 15: '急停故障'
| };
|
| const dcAC1HardFault = {
| 0: '电网电压高告警',
| 1: '电网电压低告警',
| 2: '电网频率高告警',
| 3: '电网频率低告警',
| 4: '母线总压过高告警',
| 5: '母线总压过低告警',
| 6: '正母线一级过压告警',
| 7: '负母线一级过压告警',
| 8: '直流端口过压告警',
| 9: '直流端口欠压告警',
| 10: '电网相序告警',
| 11: '逆变相序告警',
| 12: '逆变幅值锁定告警',
| 13: '交流输出短路故障',
| 14: '交流电流采样故障',
| 15: 'RS485 通信故障'
| };
|
| const dcAC1TmpFault = {
| 0: '进风口环境温度过高告警',
| 1: '出风口环境温度过高告警',
| 2: '模组A2温度过高告警',
| 3: '模组B2温度过高告警',
| 4: '模组C2温度过高告警',
| 5: '模组A1温度过高告警',
| 6: '模组B1温度过高告警',
| 7: '模组C1温度过高告警',
| 8: '模组A2温度传感器故障',
| 9: '模组B2温度传感器故障',
| 10: '模组C2温度传感器故障',
| 11: '模组A1温度传感器故障',
| 12: '模组B1温度传感器故障',
| 13: '模组C1温度传感器故障',
| 14: 'AC恒压模式下电网接入故障',
| 15: 'DSP软件版本不匹配故障'
| };
|
| // 空调状态
| const airCondState = {
| 0: '停止',
| 1: '运行',
| 2: '未选配'
| };
|
| // 电池状态
| const battState = {
| 1: '充电',
| 2: '放电',
| 3: '开路',
| 4: '故障'
| };
|
| const CONFIG = {
| sysAlm0,
| sysAlm1,
| sysAlm2,
| sysAlm3,
| sysFault0,
| dcAC1CompFault,
| dcAC1EnvirFault,
| dcAC1HardFault,
| dcAC1TmpFault,
| dcAC2CompFault: dcAC1CompFault,
| dcAC2EnvirFault: dcAC1EnvirFault,
| dcAC2HardFault: dcAC1HardFault,
| dcAC2TmpFault: dcAC1TmpFault,
| dcAC3CompFault: dcAC1CompFault,
| dcAC3EnvirFault: dcAC1EnvirFault,
| dcAC3HardFault: dcAC1HardFault,
| dcAC3TmpFault: dcAC1TmpFault,
| dcAC4CompFault: dcAC1CompFault,
| dcAC4EnvirFault: dcAC1EnvirFault,
| dcAC4HardFault: dcAC1HardFault,
| dcAC4TmpFault: dcAC1TmpFault,
| battAlm0,
| battfault0,
| battfault1,
| // 状态
| diState,
| doState
| };
|
| const getAlarm = function (num, alarmConfig) {
| let res = [];
| alarmConfig = CONFIG[alarmConfig];
| Object.keys(alarmConfig).forEach((v) => {
| if (getBit(num, v)) {
| res.push(alarmConfig[v]);
| }
| });
| if (!res.length) {
| res = ['没有故障或告警'];
| }
| return res;
| };
|
| const getState = function (num, stateConfig) {
| let res = [];
| stateConfig = CONFIG[stateConfig];
| Object.keys(stateConfig).forEach((v) => {
| res.push(stateConfig[v] + ': ' + getBit(num, v));
| });
| return res;
| }
|
| export {
| workModel,
| sysState,
| battState,
| battGrpStats,
| SYS,
| PCS,
| getAlarm,
| dcAC1DevRun,
| getState,
| airCondState
| }
|
|