초기 커밋.

This commit is contained in:
2025-12-17 12:40:51 +09:00
parent e8d195c03e
commit 368acb1aa8
184 changed files with 95393 additions and 0 deletions

View File

@@ -0,0 +1,324 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
using DevExpress.XtraCharts;
using LFP_Manager.DataStructure;
namespace LFP_Manager.Controls
{
public delegate void CommandEvent(int sId, int cmd, int index, int flag, ref DeviceParamData aParam, ref DeviceCalibration aCalib);
public partial class ucMainStatus : DevExpress.XtraEditors.XtraUserControl
{
#region VARIABLES
private CommConfig Config;
private DeviceSystemTotalData SystemTotalData;
private DeviceSystemData[] SystemData;
private ucModuleMainHeader ModuleMainHeader;
private ucModuleMainB[] ModuleMain;
private DevExpress.XtraLayout.LayoutControlItem[] lcitemModuleMain;
private DevExpress.XtraLayout.EmptySpaceItem[] emptySpaceItem;
private int mQty;
private double TotalVoltage;
private double TotalCurrent;
private double TotalTemperature;
private double TotalSoc;
private double TotalSoh;
private bool active = false;
public event CommandEvent OnCommand = null;
#endregion
#region CONSTRUCTORS
public ucMainStatus()
{
InitializeComponent();
mQty = csConstData.SystemInfo.MAX_MODULE_SIZE;
}
#endregion
public void UpdateMainConfig(ref CommConfig aConfig, ref DeviceSystemData[] mSystemData)
{
Config = aConfig;
SystemData = mSystemData;
mQty = Config.ModuleQty;
LoadModuleMain(mQty);
lcgbModuleMain.Invalidate();
}
private void LoadModuleMain(int mQty)
{
lcModuleMain.Controls.Clear();
lcgbModuleMain.Items.Clear();
ModuleMainHeader = new ucModuleMainHeader();
ModuleMain = new ucModuleMainB[mQty];
lcitemModuleMain = new DevExpress.XtraLayout.LayoutControlItem[mQty + 1];
int empsize = csConstData.SystemInfo.MAX_MODULE_SIZE - mQty;
if (empsize > 0)
{
emptySpaceItem = new DevExpress.XtraLayout.EmptySpaceItem[empsize];
}
int tWidth = lcgbModuleMain.Size.Width;
int tHeight = lcgbModuleMain.Size.Height;
lcitemModuleMain[0] = new DevExpress.XtraLayout.LayoutControlItem
{
Control = ModuleMainHeader,
Name = String.Format("lcitemModuleMainHeader"),
Size = new Size(tWidth - 4, 30),
Location = new Point(2, 2),
TextVisible = false,
Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0)
};
int emp = 0;
for (int i = 0; i < csConstData.SystemInfo.MAX_MODULE_SIZE; i++)
{
if (i < mQty)
{
ModuleMain[i] = new ucModuleMainB(Config, i + 1, ref SystemData[i]);
ModuleMain[i].OnCommand += SetCmdEvent;
lcitemModuleMain[i + 1] = new DevExpress.XtraLayout.LayoutControlItem
{
Control = ModuleMain[i],
Name = String.Format("lcitemModuleMain_{0}", i + 1),
Size = new Size(tWidth - 4, 60),
Location = new Point(2, 2 + 30 + (i * 60)),
TextVisible = false,
Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0)
};
}
else
{
emptySpaceItem[emp] = new DevExpress.XtraLayout.EmptySpaceItem
{
Size = new Size(tWidth - 4, 60),
Location = new Point(2, 2 + 30 + (i * 60))
};
emp++;
}
}
lcModuleMain.Controls.Add(ModuleMainHeader);
for (int i = 0; i < csConstData.SystemInfo.MAX_MODULE_SIZE; i++)
{
if (i < mQty)
lcModuleMain.Controls.Add(ModuleMain[i]);
}
DevExpress.XtraLayout.BaseLayoutItem[] abase = new DevExpress.XtraLayout.BaseLayoutItem[csConstData.SystemInfo.MAX_MODULE_SIZE + 1];
emp = 0;
for (int i = 0; i < csConstData.SystemInfo.MAX_MODULE_SIZE + 1; i++)
{
if (i < (mQty + 1))
abase[i] = lcitemModuleMain[i];
else
abase[i] = emptySpaceItem[emp++];
}
lcgbModuleMain.Items.AddRange(abase);
lcgbModuleMain.Invalidate();
}
public void Start(ref CommConfig aConfig, ref DeviceSystemTotalData aSystemTotalData, ref DeviceSystemData[] aSystemData)
{
Config = aConfig;
SystemTotalData = aSystemTotalData;
SystemData = aSystemData;
switch (Config.CommType)
{
case csConstData.CommType.COMM_UART_MULTI:
mQty = Config.ModuleQty;
break;
default:
mQty = Config.ModuleQty;
break;
}
active = true;
tmrDisplay.Enabled = true;
}
public void Stop()
{
active = false;
tmrDisplay.Enabled = false;
}
public void UpdateData(ref DeviceSystemTotalData aSystemTotalData, ref DeviceSystemData[] aSystemData)
{
if (active)
{
SystemTotalData = aSystemTotalData;
SystemData = aSystemData;
//if (this.InvokeRequired)
//{
// this.Invoke(new MethodInvoker(delegate ()
// {
// //mQty = SystemTotalData.IdentData.ModuleQuantity;
// LoadModuleMain(mQty);
// OnCommand?.Invoke(0, 1, mQty, 1, ref Param, ref Calib);
// }));
//}
//else
//{
// //mQty = SystemTotalData.IdentData.ModuleQuantity;
// LoadModuleMain(mQty);
// OnCommand?.Invoke(0, 1, mQty, 1, ref Param, ref Calib);
//}
TotalVoltage = (double)SystemTotalData.ValueData.TotalVoltage / 10;
TotalCurrent = (double)SystemTotalData.ValueData.TotalCurrent / 10;
TotalSoc = (double)SystemTotalData.ValueData.TotalSOC / 10;
TotalSoh = (double)SystemTotalData.ValueData.TotalSOH / 10;
TotalTemperature = (double)SystemTotalData.ValueData.TotalTemp / 10;
for (int i = 0; i < ModuleMain.Length; i++)
{
ModuleMain[i].UpdateData(ref SystemData[i]);
}
}
}
#region ON EVENT FUNCTION
private void SetCmdEvent(int sId, int cmd, int index, int flag, ref DeviceParamData aParam, ref DeviceCalibration aCalib)
{
OnCommand?.Invoke(sId, cmd, index, flag, ref aParam, ref aCalib);
}
#endregion
#region BUTTON EVENT
#endregion
#region TIMER EVENT
private void tmrDisplay_Tick(object sender, EventArgs e)
{
DisplayTotalValue();
DisplayStatusAndAlarm();
}
#endregion
#region DISPLAY FUNCTION
private void DisplayTotalValue()
{
if (active)
{
rtGraph.Text = String.Format("Real Time Graph - {0} - {1} Modules"
, String.Format("V{0}", SystemTotalData.IdentData.FwVerStr)
, Config.ModuleQty);
dgTotalVoltage.Text = String.Format("{0:0.0}", TotalVoltage);
dgTotalCurrent.Text = String.Format("{0:0.0}", TotalCurrent);
dgTotalTemp.Text = String.Format("{0:0.0}", TotalTemperature);
dgTotalSOC.Text = String.Format("{0:0.0}", TotalSoc);
dgTotalSOH.Text = String.Format("{0:0.0}", TotalSoh);
chartVI.Invalidate();
}
}
private void DisplayStatusAndAlarm()
{
if (SystemTotalData.CommFail == false)
{
// Operating Status
if (SystemTotalData.StatusData.status == 0)
{
lbStatus.Text = "STANDBY";
lbStatus.ForeColor = System.Drawing.Color.Black;
}
else if (SystemTotalData.StatusData.status == 1)
{
lbStatus.Text = "CHARGING";
lbStatus.ForeColor = System.Drawing.Color.Blue;
}
else if (SystemTotalData.StatusData.status == 2)
{
lbStatus.Text = "DISCHARGING";
lbStatus.ForeColor = System.Drawing.Color.Magenta;
}
else if (SystemTotalData.StatusData.status == 3)
{
lbStatus.Text = "FLOATING";
lbStatus.ForeColor = System.Drawing.Color.Black;
}
else
{
lbStatus.Text = "UNKNOWN";
lbStatus.ForeColor = System.Drawing.Color.Black;
}
// Alarm Display
switch (SystemTotalData.StatusData.batteryStatus)
{
case 0: // NORMAL
lbAlarm.Text = "NORMAL";
lbAlarm.ForeColor = System.Drawing.Color.Green;
break;
case 1: // WARNING
lbAlarm.Text = "NORMAL";
lbAlarm.ForeColor = System.Drawing.Color.Green;
break;
case 2: // FAULT
lbAlarm.Text = "NORMAL";
lbAlarm.ForeColor = System.Drawing.Color.Green;
break;
case 3: // WARMING UP
lbAlarm.Text = "WARMING UP";
lbAlarm.ForeColor = System.Drawing.Color.Green;
break;
case 4: // FAULT (Anti-Theft Comm.)
lbAlarm.Text = "FAULT (Anti-Theft)";
lbAlarm.ForeColor = System.Drawing.Color.Green;
break;
case 5: // FAULT (Anti-Theft Gyro-Scope)
lbAlarm.Text = "FAULT (Anti-Theft)";
lbAlarm.ForeColor = System.Drawing.Color.Green;
break;
default:
lbAlarm.Text = string.Format("UNKNOWN ({0})", SystemTotalData.StatusData.batteryStatus);
lbAlarm.ForeColor = System.Drawing.Color.Red;
break;
}
}
else
{
lbStatus.Text = "OFF-LINE";
lbStatus.ForeColor = System.Drawing.Color.Red;
lbAlarm.Text = "OFF-LINE";
lbAlarm.ForeColor = System.Drawing.Color.Red;
}
}
#endregion
}
}