초기 커밋.
This commit is contained in:
442
LFP_Manager/Controls/UcFaultAlarmGroup.cs
Normal file
442
LFP_Manager/Controls/UcFaultAlarmGroup.cs
Normal file
@@ -0,0 +1,442 @@
|
||||
using DevExpress.XtraEditors;
|
||||
using LFP_Manager.DataStructure;
|
||||
using LFP_Manager.Utils;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace LFP_Manager.Controls
|
||||
{
|
||||
public partial class UcFaultAlarmGroup : DevExpress.XtraEditors.XtraUserControl
|
||||
{
|
||||
#region CONSTANTS
|
||||
private const int FAULT_ALARM_COUNT = 14;
|
||||
|
||||
private enum eAlarmComp
|
||||
{
|
||||
MODULE_OV = 0,
|
||||
CELL_OV = 1,
|
||||
MODULE_UV = 2,
|
||||
CELL_UV = 3,
|
||||
CHG_OC = 4,
|
||||
DCH_OC = 5,
|
||||
CHG_OT = 6,
|
||||
CHG_UT = 7,
|
||||
DCH_OT = 8,
|
||||
DCH_UT = 9,
|
||||
LOW_SOC = 10,
|
||||
MOS_OT = 11,
|
||||
SC = 12,
|
||||
CB_OFF = 13,
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region VARIABLES
|
||||
private CommConfig Config;
|
||||
|
||||
private UcFaultAlarm[] FaultAlarm;
|
||||
#endregion
|
||||
|
||||
#region CONSTRUCTORS
|
||||
public UcFaultAlarmGroup()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
CreateAlarmComponent();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region COMPONENTS
|
||||
|
||||
private void CreateAlarmComponent()
|
||||
{
|
||||
FaultAlarm = new UcFaultAlarm[FAULT_ALARM_COUNT];
|
||||
|
||||
void Bind(eAlarmComp comp, UcFaultAlarm control, int displayNo, string title)
|
||||
{
|
||||
FaultAlarm[(int)comp] = control;
|
||||
FaultAlarm[(int)comp].SetFaultName(displayNo, title);
|
||||
}
|
||||
|
||||
Bind(eAlarmComp.MODULE_OV , ucFaultAlarm1 , 1, "Module OV");
|
||||
Bind(eAlarmComp.CELL_OV , ucFaultAlarm3 , 3, "Cell OV");
|
||||
Bind(eAlarmComp.MODULE_UV , ucFaultAlarm2 , 2, "Module UV");
|
||||
Bind(eAlarmComp.CELL_UV , ucFaultAlarm4 , 4, "Cell UV");
|
||||
Bind(eAlarmComp.CHG_OC , ucFaultAlarm5 , 5, "Chg OC");
|
||||
Bind(eAlarmComp.DCH_OC , ucFaultAlarm6 , 6, "Dch OC");
|
||||
Bind(eAlarmComp.CHG_OT , ucFaultAlarm7 , 7, "Chg OT");
|
||||
Bind(eAlarmComp.CHG_UT , ucFaultAlarm8 , 8, "Chg UT");
|
||||
Bind(eAlarmComp.DCH_OT , ucFaultAlarm9 , 9, "Dch OT");
|
||||
Bind(eAlarmComp.DCH_UT , ucFaultAlarm10, 10, "Dch UT");
|
||||
Bind(eAlarmComp.LOW_SOC , ucFaultAlarm11, 11, "Low SOC");
|
||||
Bind(eAlarmComp.MOS_OT , ucFaultAlarm12, 12, "Mos OT");
|
||||
Bind(eAlarmComp.SC , ucFaultAlarm13, 13, "S-C");
|
||||
Bind(eAlarmComp.CB_OFF , ucFaultAlarm14, 14, "CB Off");
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region PUBLIC METHODS
|
||||
public void SetData(CommConfig aConfig, CsDeviceData.DeviceModuleData rModuleData)
|
||||
{
|
||||
DisplayAlarm(rModuleData);
|
||||
//switch (aConfig.CommType)
|
||||
//{
|
||||
// case csConstData.CommType.COMM_UART:
|
||||
// DisplayAlarmDeltaIndUart(rModuleData);
|
||||
// break;
|
||||
// case csConstData.CommType.COMM_RS485:
|
||||
// DisplayAlarmDeltaInd485(rModuleData);
|
||||
// break;
|
||||
// case csConstData.CommType.COMM_SNMP:
|
||||
// DisplayAlarmSnmp(rModuleData);
|
||||
// break;
|
||||
// default:
|
||||
// break;
|
||||
//}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region DISPLAY FUNCTION
|
||||
|
||||
private void DisplayAlarm(CsDeviceData.DeviceModuleData rModuleData)
|
||||
{
|
||||
bool[] aProtect = csUtils.UInt16ToBitArray(rModuleData.StatusData.protect);
|
||||
bool[] aWarning = csUtils.UInt16ToBitArray(rModuleData.StatusData.warning);
|
||||
|
||||
// 공통 헬퍼: protect 비트가 우선, 없으면 warning, 둘 다 없으면 정상
|
||||
void SetByBits(eAlarmComp comp, int? protectBit, int? warningBit)
|
||||
{
|
||||
int idx = (int)comp;
|
||||
if (protectBit.HasValue && aProtect[protectBit.Value]) { FaultAlarm[idx].SetFault(1); return; }
|
||||
if (warningBit.HasValue && aWarning[warningBit.Value]) { FaultAlarm[idx].SetFault(2); return; }
|
||||
FaultAlarm[idx].SetFault(3);
|
||||
}
|
||||
|
||||
// 1) OV/UV/OC (양쪽에 동일 인덱스 존재)
|
||||
SetByBits(eAlarmComp.MODULE_OV, (int)CsAlarmDefine.eGuiProtectBit.PACK_OV, (int)CsAlarmDefine.eGuiWarningBit.PACK_OV);
|
||||
SetByBits(eAlarmComp.CELL_OV , (int)CsAlarmDefine.eGuiProtectBit.CELL_OV, (int)CsAlarmDefine.eGuiWarningBit.CELL_OV);
|
||||
SetByBits(eAlarmComp.MODULE_UV, (int)CsAlarmDefine.eGuiProtectBit.PACK_UV, (int)CsAlarmDefine.eGuiWarningBit.PACK_UV);
|
||||
SetByBits(eAlarmComp.CELL_UV , (int)CsAlarmDefine.eGuiProtectBit.CELL_UV, (int)CsAlarmDefine.eGuiWarningBit.CELL_UV);
|
||||
SetByBits(eAlarmComp.CHG_OC , (int)CsAlarmDefine.eGuiProtectBit.CHG_OC , (int)CsAlarmDefine.eGuiWarningBit.CHG_OC );
|
||||
SetByBits(eAlarmComp.DCH_OC , (int)CsAlarmDefine.eGuiProtectBit.DCH_OC , (int)CsAlarmDefine.eGuiWarningBit.DCH_OC );
|
||||
|
||||
// 2) 온도류
|
||||
SetByBits(eAlarmComp.CHG_OT , (int)CsAlarmDefine.eGuiProtectBit.CHG_OT , (int)CsAlarmDefine.eGuiWarningBit.CHG_OT );
|
||||
SetByBits(eAlarmComp.CHG_UT , (int)CsAlarmDefine.eGuiProtectBit.CHG_UT , (int)CsAlarmDefine.eGuiWarningBit.CHG_UT );
|
||||
SetByBits(eAlarmComp.DCH_OT , (int)CsAlarmDefine.eGuiProtectBit.DCH_OT , (int)CsAlarmDefine.eGuiWarningBit.DCH_OT );
|
||||
SetByBits(eAlarmComp.DCH_UT , (int)CsAlarmDefine.eGuiProtectBit.DCH_UT , (int)CsAlarmDefine.eGuiWarningBit.DCH_UT );
|
||||
|
||||
// 3) Low SOC : 경고 전용
|
||||
SetByBits(eAlarmComp.LOW_SOC , null , (int)CsAlarmDefine.eGuiWarningBit.LOW_SOC);
|
||||
|
||||
// 4) MOS OT : 보호/경고 모두 사용
|
||||
SetByBits(eAlarmComp.MOS_OT , (int)CsAlarmDefine.eGuiProtectBit.MOS_OT, (int)CsAlarmDefine.eGuiWarningBit.MOS_OT);
|
||||
|
||||
// 5) SC(단락) : 보호 전용
|
||||
SetByBits(eAlarmComp.SC , (int)CsAlarmDefine.eGuiProtectBit.SC , null);
|
||||
|
||||
// 6) DIFF_VOLT : 경고 전용
|
||||
SetByBits(eAlarmComp.CB_OFF , null , (int)CsAlarmDefine.eGuiWarningBit.CB_OFF);
|
||||
}
|
||||
|
||||
private void DisplayAlarmDeltaIndUart(CsDeviceData.DeviceModuleData rModuleData)
|
||||
{
|
||||
bool[] aProtect = csUtils.UInt16ToBitArray(rModuleData.StatusData.protect);
|
||||
bool[] aWarning = csUtils.UInt16ToBitArray(rModuleData.StatusData.warning);
|
||||
bool[] error = csUtils.UInt16ToBitArray(rModuleData.StatusData.errorCode);
|
||||
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
if (aProtect[i] == true) { FaultAlarm[i].SetFault(1); }
|
||||
else if (aWarning[i] == true) { FaultAlarm[i].SetFault(2); }
|
||||
else { FaultAlarm[i].SetFault(3); }
|
||||
}
|
||||
|
||||
// Charge over temperature warning / protect
|
||||
int aComp = 6;
|
||||
int alarmID = (int)CsAlarmDefine.eGuiWarningBit.CHG_OT;
|
||||
if (aProtect[alarmID] == true) { FaultAlarm[aComp].SetFault(1); }
|
||||
else if (aWarning[alarmID] == true) { FaultAlarm[aComp].SetFault(2); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
|
||||
// Charge under temperature warning / protect
|
||||
aComp = 7;
|
||||
alarmID = (int)CsAlarmDefine.eGuiWarningBit.CHG_UT;
|
||||
if (aProtect[alarmID] == true) { FaultAlarm[aComp].SetFault(1); }
|
||||
else if (aWarning[alarmID] == true) { FaultAlarm[aComp].SetFault(2); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
|
||||
// Discharge over temperature warning / protect
|
||||
aComp = 8;
|
||||
alarmID = (int)CsAlarmDefine.eGuiWarningBit.DCH_OT;
|
||||
if (aProtect[alarmID] == true) { FaultAlarm[aComp].SetFault(1); }
|
||||
else if (aWarning[alarmID] == true) { FaultAlarm[aComp].SetFault(2); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
|
||||
// Discharge under temperature warning / protect
|
||||
aComp = 9;
|
||||
alarmID = (int)CsAlarmDefine.eGuiWarningBit.DCH_UT;
|
||||
if (aProtect[alarmID] == true) { FaultAlarm[aComp].SetFault(1); }
|
||||
else if (aWarning[alarmID] == true) { FaultAlarm[aComp].SetFault(2); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
|
||||
// Low SOC
|
||||
// Discharge under temperature warning / protect
|
||||
aComp = 10;
|
||||
alarmID = (int)CsAlarmDefine.eGuiWarningBit.LOW_SOC;
|
||||
if (aWarning[alarmID] == true) { FaultAlarm[aComp].SetFault(2); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
|
||||
// MOS Over Temperature Alarm
|
||||
aComp = 11;
|
||||
alarmID = (int)CsAlarmDefine.eGuiWarningBit.MOS_OT;
|
||||
if (aProtect[alarmID] == true) { FaultAlarm[aComp].SetFault(1); }
|
||||
else if (aWarning[alarmID] == true) { FaultAlarm[aComp].SetFault(2); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
|
||||
// Short Circuit Protect
|
||||
aComp = 12;
|
||||
alarmID = (int)CsAlarmDefine.eGuiProtectBit.SC;
|
||||
if (aProtect[alarmID] == true) { FaultAlarm[aComp].SetFault(1); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
|
||||
// DIFF Cell Voltage Alarm
|
||||
aComp = 12;
|
||||
alarmID = (int)CsAlarmDefine.eGuiWarningBit.DIFF_VOLT;
|
||||
if (aWarning[alarmID] == true) { FaultAlarm[aComp].SetFault(2); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
}
|
||||
private void DisplayAlarmDeltaInd485(CsDeviceData.DeviceModuleData rModuleData)
|
||||
{
|
||||
bool[] aProtect = csUtils.UInt16ToBitArray(rModuleData.StatusData.protect);
|
||||
bool[] aWarning = csUtils.UInt16ToBitArray(rModuleData.StatusData.warning);
|
||||
bool[] error = csUtils.UInt16ToBitArray(rModuleData.StatusData.errorCode);
|
||||
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
if (aProtect[i] == true) { FaultAlarm[i].SetFault(1); }
|
||||
else if (aWarning[i] == true) { FaultAlarm[i].SetFault(2); }
|
||||
else { FaultAlarm[i].SetFault(3); }
|
||||
}
|
||||
|
||||
// Charge over temperature warning / protect
|
||||
int aComp = 6;
|
||||
int alarmID = 8;
|
||||
if (aProtect[alarmID] == true) { FaultAlarm[aComp].SetFault(1); }
|
||||
else if (aWarning[alarmID] == true) { FaultAlarm[aComp].SetFault(2); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
|
||||
// Discharge over temperature warning / protect
|
||||
aComp = 8;
|
||||
alarmID = 9;
|
||||
if (aProtect[alarmID] == true) { FaultAlarm[aComp].SetFault(1); }
|
||||
else if (aWarning[alarmID] == true) { FaultAlarm[aComp].SetFault(2); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
|
||||
// Charge under temperature warning / protect
|
||||
aComp = 7;
|
||||
alarmID = 10;
|
||||
if (aProtect[alarmID] == true) { FaultAlarm[aComp].SetFault(1); }
|
||||
else if (aWarning[alarmID] == true) { FaultAlarm[aComp].SetFault(2); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
|
||||
// Discharge under temperature warning / protect
|
||||
aComp = 9;
|
||||
alarmID = 11;
|
||||
if (aProtect[alarmID] == true) { FaultAlarm[aComp].SetFault(1); }
|
||||
else if (aWarning[alarmID] == true) { FaultAlarm[aComp].SetFault(2); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
|
||||
// Low SOC / SOH
|
||||
if (aWarning[12] == true)
|
||||
{
|
||||
// Low SOC
|
||||
FaultAlarm[10].SetFaultName(11, "Low SOC");
|
||||
FaultAlarm[10].SetFault(2);
|
||||
}
|
||||
else if (aWarning[13] == true)
|
||||
{
|
||||
// Low SOH
|
||||
FaultAlarm[10].SetFaultName(11, "Low SOH");
|
||||
FaultAlarm[10].SetFault(2);
|
||||
}
|
||||
else
|
||||
{
|
||||
FaultAlarm[10].SetFaultName(11, "SOC/SOH");
|
||||
FaultAlarm[10].SetFault(3);
|
||||
}
|
||||
|
||||
// MOS Over Temperature Alarm
|
||||
aComp = 11;
|
||||
alarmID = 7;
|
||||
if (aProtect[alarmID] == true) { FaultAlarm[aComp].SetFault(1); }
|
||||
else if (aWarning[alarmID] == true) { FaultAlarm[aComp].SetFault(2); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
|
||||
// Cell ETC. Alarm
|
||||
if (aProtect[13] == true)
|
||||
{
|
||||
// Short Circuit Protect
|
||||
FaultAlarm[12].SetFaultName(13, "Short Circuit");
|
||||
FaultAlarm[12].SetFault(1);
|
||||
}
|
||||
else if (aWarning[14] == true)
|
||||
{
|
||||
FaultAlarm[12].SetFaultName(13, "MD ISO");
|
||||
FaultAlarm[12].SetFault(2);
|
||||
}
|
||||
else
|
||||
{
|
||||
FaultAlarm[12].SetFaultName(13, "ETC. Alarm");
|
||||
FaultAlarm[12].SetFault(3);
|
||||
}
|
||||
|
||||
// Error Code
|
||||
if (error[0] == true)
|
||||
{
|
||||
FaultAlarm[13].SetFaultName(14, "Volt Error");
|
||||
FaultAlarm[13].SetFault(1);
|
||||
}
|
||||
else if (error[1] == true)
|
||||
{
|
||||
FaultAlarm[13].SetFaultName(14, "Temp Error");
|
||||
FaultAlarm[13].SetFault(1);
|
||||
}
|
||||
else if (error[4] == true)
|
||||
{
|
||||
FaultAlarm[13].SetFaultName(14, "Unbalance");
|
||||
FaultAlarm[13].SetFault(1);
|
||||
}
|
||||
else if (error[5] == true)
|
||||
{
|
||||
FaultAlarm[13].SetFaultName(14, "Emergency");
|
||||
FaultAlarm[13].SetFault(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
FaultAlarm[13].SetFaultName(14, "Error Code");
|
||||
FaultAlarm[13].SetFault(3);
|
||||
}
|
||||
}
|
||||
|
||||
private void DisplayAlarmSnmp(CsDeviceData.DeviceModuleData rModuleData)
|
||||
{
|
||||
bool[] aProtect = csUtils.UInt16ToBitArray(rModuleData.StatusData.protect);
|
||||
bool[] aWarning = csUtils.UInt16ToBitArray(rModuleData.StatusData.warning);
|
||||
bool[] error = csUtils.UInt16ToBitArray(rModuleData.StatusData.errorCode);
|
||||
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
if (aProtect[i] == true) { FaultAlarm[i].SetFault(1); }
|
||||
else if (aWarning[i] == true) { FaultAlarm[i].SetFault(2); }
|
||||
else { FaultAlarm[i].SetFault(3); }
|
||||
}
|
||||
|
||||
// Charge over temperature warning / protect
|
||||
int aComp = 6;
|
||||
int alarmID = 8;
|
||||
if (aProtect[alarmID] == true) { FaultAlarm[aComp].SetFault(1); }
|
||||
else if (aWarning[alarmID] == true) { FaultAlarm[aComp].SetFault(2); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
|
||||
// Charge under temperature warning / protect
|
||||
aComp = 7;
|
||||
alarmID = 10;
|
||||
if (aProtect[alarmID] == true) { FaultAlarm[aComp].SetFault(1); }
|
||||
else if (aWarning[alarmID] == true) { FaultAlarm[aComp].SetFault(2); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
|
||||
// Discharge over temperature warning / protect
|
||||
aComp = 8;
|
||||
alarmID = 9;
|
||||
if (aProtect[alarmID] == true) { FaultAlarm[aComp].SetFault(1); }
|
||||
else if (aWarning[alarmID] == true) { FaultAlarm[aComp].SetFault(2); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
|
||||
// Discharge under temperature warning / protect
|
||||
aComp = 9;
|
||||
alarmID = 11;
|
||||
if (aProtect[alarmID] == true) { FaultAlarm[aComp].SetFault(1); }
|
||||
else if (aWarning[alarmID] == true) { FaultAlarm[aComp].SetFault(2); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
|
||||
// Low SOC / SOH
|
||||
if (aWarning[12] == true)
|
||||
{
|
||||
// Low SOC
|
||||
FaultAlarm[10].SetFaultName(11, "Low SOC");
|
||||
FaultAlarm[10].SetFault(2);
|
||||
}
|
||||
else if (aWarning[13] == true)
|
||||
{
|
||||
// Low SOH
|
||||
FaultAlarm[10].SetFaultName(11, "Low SOH");
|
||||
FaultAlarm[10].SetFault(2);
|
||||
}
|
||||
else
|
||||
{
|
||||
FaultAlarm[10].SetFaultName(11, "SOC/SOH");
|
||||
FaultAlarm[10].SetFault(3);
|
||||
}
|
||||
|
||||
// MOS Over Temperature Alarm
|
||||
aComp = 11;
|
||||
alarmID = 7;
|
||||
if (aProtect[alarmID] == true) { FaultAlarm[aComp].SetFault(1); }
|
||||
else if (aWarning[alarmID] == true) { FaultAlarm[aComp].SetFault(2); }
|
||||
else { FaultAlarm[aComp].SetFault(3); }
|
||||
|
||||
// Cell ETC. Alarm
|
||||
if (aProtect[13] == true)
|
||||
{
|
||||
// Short Circuit Protect
|
||||
FaultAlarm[12].SetFaultName(13, "Short Circuit");
|
||||
FaultAlarm[12].SetFault(1);
|
||||
}
|
||||
else if (aWarning[14] == true)
|
||||
{
|
||||
FaultAlarm[12].SetFaultName(13, "MD ISO");
|
||||
FaultAlarm[12].SetFault(2);
|
||||
}
|
||||
else
|
||||
{
|
||||
FaultAlarm[12].SetFaultName(13, "ETC. Alarm");
|
||||
FaultAlarm[12].SetFault(3);
|
||||
}
|
||||
|
||||
// Error Code
|
||||
if (error[0] == true)
|
||||
{
|
||||
FaultAlarm[13].SetFaultName(14, "Volt Error");
|
||||
FaultAlarm[13].SetFault(1);
|
||||
}
|
||||
else if (error[1] == true)
|
||||
{
|
||||
FaultAlarm[13].SetFaultName(14, "Temp Error");
|
||||
FaultAlarm[13].SetFault(1);
|
||||
}
|
||||
else if (error[4] == true)
|
||||
{
|
||||
FaultAlarm[13].SetFaultName(14, "Unbalance");
|
||||
FaultAlarm[13].SetFault(1);
|
||||
}
|
||||
else if (error[5] == true)
|
||||
{
|
||||
FaultAlarm[13].SetFaultName(14, "Emergency");
|
||||
FaultAlarm[13].SetFault(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
FaultAlarm[13].SetFaultName(14, "Error Code");
|
||||
FaultAlarm[13].SetFault(3);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user