초기 커밋.
This commit is contained in:
321
LFP_Manager/Forms/fmxHistory.cs
Normal file
321
LFP_Manager/Forms/fmxHistory.cs
Normal file
@@ -0,0 +1,321 @@
|
||||
using LFP_Manager.DataStructure;
|
||||
using LFP_Manager.Function;
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace LFP_Manager.Forms
|
||||
{
|
||||
public partial class fmxHistory : DevExpress.XtraEditors.XtraForm
|
||||
{
|
||||
#region VARIABLES
|
||||
|
||||
private int SystemId = 0;
|
||||
private CommConfig Config;
|
||||
|
||||
private byte[] rData = null;
|
||||
private ushort curr_addr = 0;
|
||||
private int hist_no = 0;
|
||||
private bool stopReq = true;
|
||||
|
||||
private DateTime ReqDateTime;
|
||||
|
||||
private DataTable BmsHistoryTable = null;
|
||||
|
||||
public event SendDataUartEvent OnSendUartData = null;
|
||||
|
||||
#endregion
|
||||
|
||||
#region CONTRUCTORS
|
||||
|
||||
//public fmxHistory()
|
||||
//{
|
||||
// InitializeComponent();
|
||||
//}
|
||||
|
||||
public fmxHistory(CommConfig aConfig, int systemId)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
Config = aConfig;
|
||||
|
||||
ucHistroy1.SetCommCofig(Config);
|
||||
SystemId = systemId;
|
||||
|
||||
CreateHistoryColomn(ref BmsHistoryTable);
|
||||
|
||||
switch (Config.CommType)
|
||||
{
|
||||
case csConstData.CommType.COMM_UART:
|
||||
pgBmsHistory.PageEnabled = true;
|
||||
//tabHistory.TabPages.Remove(pgBmsHistory);
|
||||
break;
|
||||
case csConstData.CommType.COMM_RS485:
|
||||
pgBmsHistory.PageEnabled = false;
|
||||
tabHistory.TabPages.Remove(pgBmsHistory);
|
||||
break;
|
||||
case csConstData.CommType.COMM_SNMP:
|
||||
pgBmsHistory.PageEnabled = false;
|
||||
tabHistory.TabPages.Remove(pgBmsHistory);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region INITIALIZE COMPONENT
|
||||
|
||||
private void CreateHistoryColomn(ref DataTable hDT)
|
||||
{
|
||||
hDT = new DataTable();
|
||||
|
||||
hDT.Columns.Add("no", typeof(int));
|
||||
hDT.Columns.Add("datetime", typeof(DateTime));
|
||||
hDT.Columns.Add("status", typeof(int));
|
||||
hDT.Columns.Add("warning", typeof(string));
|
||||
hDT.Columns.Add("protect", typeof(string));
|
||||
hDT.Columns.Add("error", typeof(string));
|
||||
|
||||
hDT.Columns.Add("voltage", typeof(float));
|
||||
hDT.Columns.Add("current", typeof(float));
|
||||
hDT.Columns.Add("SOC", typeof(float));
|
||||
hDT.Columns.Add("SOH", typeof(float));
|
||||
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
hDT.Columns.Add(string.Format("temp_{0:00}", i + 1), typeof(float));
|
||||
}
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
hDT.Columns.Add(string.Format("cell_v_{0:00}", i + 1), typeof(float));
|
||||
}
|
||||
gcBmsHistory.DataSource = hDT;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region PUBLIC FUNCTIONS
|
||||
private short[] ByteArrTo2Short(byte[] bytes)
|
||||
{
|
||||
short[] result = null;
|
||||
|
||||
if (bytes != null)
|
||||
{
|
||||
int len = bytes[2];
|
||||
result = new short[len / 2];
|
||||
|
||||
for (int i = 0; i < result.Length; i++)
|
||||
{
|
||||
result[i] = (short)((bytes[3 + (i * 2) + 0] << 8) + bytes[3 + (i * 2) + 1]);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
public void RecvUardData(byte[] data)
|
||||
{
|
||||
rData = data;
|
||||
|
||||
if ((rData != null) && (rData.Length > 58))
|
||||
{
|
||||
try
|
||||
{
|
||||
DataRow hRow = BmsHistoryTable.NewRow();
|
||||
|
||||
short[] shorts = ByteArrTo2Short(data);
|
||||
|
||||
int pos = 0;
|
||||
int yy, MM, dd, HH, mm, ss;
|
||||
Int32 iDateTime = (rData[3 + 2] << 24) | (rData[3 + 3] << 16) | (rData[3 + 0] << 8) | (rData[3 + 1] << 0);
|
||||
//Int32 iDateTime = (Int32)((shorts[pos + 1] << 16) | (shorts[pos + 0] << 0));
|
||||
yy = (iDateTime >> 26) & 0x003F;
|
||||
MM = (iDateTime >> 22) & 0x000F;
|
||||
dd = (iDateTime >> 17) & 0x001F;
|
||||
HH = (iDateTime >> 12) & 0x001F;
|
||||
mm = (iDateTime >> 6) & 0x003F;
|
||||
ss = (iDateTime >> 0) & 0x003F;
|
||||
|
||||
hRow["no"] = hist_no;
|
||||
string stDateTime = string.Format("{0}-{1:00}-{2:00} {3:00}:{4:00}:{5:00}"
|
||||
, yy
|
||||
, MM
|
||||
, dd
|
||||
, HH
|
||||
, mm
|
||||
, ss
|
||||
);
|
||||
|
||||
DateTime aDateTime = Convert.ToDateTime(stDateTime);
|
||||
hRow["datetime"] = aDateTime;
|
||||
|
||||
pos = 2;
|
||||
hRow["status"] = shorts[pos++];
|
||||
hRow["warning"] = string.Format("{0:X4}", shorts[pos++]);
|
||||
hRow["protect"] = string.Format("{0:X4}", shorts[pos++]);
|
||||
hRow["error"] = string.Format("{0:X4}", shorts[pos++]);
|
||||
hRow["voltage"] = string.Format("{0:0.00}", Convert.ToDouble(shorts[pos++]) / 100);
|
||||
hRow["current"] = string.Format("{0:0.00}", Convert.ToDouble(shorts[pos++]) / 100);
|
||||
hRow["SOC"] = string.Format("{0:0.0}", Convert.ToDouble(shorts[pos++]) / 1);
|
||||
|
||||
// Temperature
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
hRow[string.Format("temp_{0:00}", (i * 2) + 1)] = Convert.ToDouble((byte)(shorts[pos] >> 8));
|
||||
hRow[string.Format("temp_{0:00}", (i * 2) + 2)] = Convert.ToDouble((byte)(shorts[pos++] >> 0));
|
||||
}
|
||||
// Cell Voltage
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
hRow[string.Format("cell_v_{0:00}", i + 1)] = Convert.ToDouble(shorts[pos++]) / 1000;
|
||||
}
|
||||
hRow["SOH"] = string.Format("{0:0.0}", Convert.ToDouble(shorts[pos++]) / 1);
|
||||
|
||||
BmsHistoryTable.Rows.Add(hRow);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MessageBox.Show(e.Message);
|
||||
}
|
||||
}
|
||||
gvBmsHistory.BestFitColumns();
|
||||
gvBmsHistory.ClearSelection();
|
||||
|
||||
hist_no++;
|
||||
curr_addr += 0x20;
|
||||
RequestHistoryData(curr_addr);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region BUTTON EVENT
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
private void btnBmsHistoryReq_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (stopReq)
|
||||
{
|
||||
BmsHistoryTable.Rows.Clear();
|
||||
|
||||
stopReq = false;
|
||||
hist_no = 1;
|
||||
curr_addr = 0x0200;
|
||||
TmrCheckReq.Enabled = true;
|
||||
|
||||
RequestHistoryData(curr_addr);
|
||||
|
||||
btnBmsHistoryReq.Text = "STOP";
|
||||
}
|
||||
else
|
||||
{
|
||||
stopReq = true;
|
||||
//btnBmsHistoryReq.Text = "Request";
|
||||
//TmrCheckReq.Enabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void RequestHistoryData(ushort haddr)
|
||||
{
|
||||
byte[] crc;
|
||||
ushort addr = haddr;
|
||||
|
||||
// Normal mode --> Bootloader mode
|
||||
byte[] sdata = new byte[8];
|
||||
sdata[0] = (byte)SystemId; // Dev Address
|
||||
sdata[1] = 0x03; // Function Code
|
||||
sdata[2] = (byte)(addr >> 8); // Address H
|
||||
sdata[3] = (byte)(addr >> 0); // Address L
|
||||
sdata[4] = 0x00; // Number of Register H
|
||||
sdata[5] = 0x1D; // Number of Register L
|
||||
|
||||
crc = csSerialCommFunction.GetCRC(sdata, 6);
|
||||
|
||||
sdata[6] = crc[1]; // CRCH
|
||||
sdata[7] = crc[0]; // CRCL
|
||||
|
||||
if (stopReq == false)
|
||||
{
|
||||
OnSendUartData?.Invoke(addr, sdata, false, 1);
|
||||
ReqDateTime = DateTime.Now;
|
||||
}
|
||||
}
|
||||
|
||||
private void btnExportExcel_Click(object sender, EventArgs e)
|
||||
{
|
||||
SaveFileDialog sDialog = new SaveFileDialog();
|
||||
sDialog.Title = "Select save file";
|
||||
sDialog.DefaultExt = "xlsx";
|
||||
sDialog.Filter = "Excel files 2003 (*.xls)|*.xls|All files (*.*)|*.*";
|
||||
|
||||
if (sDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
string filename = sDialog.FileName;
|
||||
|
||||
try
|
||||
{
|
||||
csExcelExport.ExportToExcelExt(BmsHistoryTable, filename);
|
||||
|
||||
MessageBox.Show("Complete Export Excel File", "Result", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GRID DISPLAY
|
||||
private void gvBmsHistory_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
|
||||
{
|
||||
if (e.Column.FieldName == "status")
|
||||
{
|
||||
int status = Convert.ToInt32(e.Value);
|
||||
switch (status)
|
||||
{
|
||||
case 0:
|
||||
e.DisplayText = "Standby";
|
||||
break;
|
||||
case 1:
|
||||
e.DisplayText = "Charging";
|
||||
break;
|
||||
case 2:
|
||||
e.DisplayText = "Discharging";
|
||||
break;
|
||||
case 4:
|
||||
e.DisplayText = "Protect";
|
||||
break;
|
||||
case 8:
|
||||
e.DisplayText = "Charging-Lmt";
|
||||
break;
|
||||
case 0x32:
|
||||
e.DisplayText = "Power-On";
|
||||
break;
|
||||
default:
|
||||
e.DisplayText = string.Format("Unknown({0:X4})", status);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region TIMER EVENT
|
||||
private void TmrCheckReq_Tick(object sender, EventArgs e)
|
||||
{
|
||||
DateTime nDateTime = ReqDateTime.AddSeconds(1);
|
||||
|
||||
if (nDateTime < DateTime.Now)
|
||||
{
|
||||
TmrCheckReq.Enabled = false;
|
||||
|
||||
MessageBox.Show("Finished BMS History Read", "Result", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
btnBmsHistoryReq.Text = "Request";
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user