Files
PR_PRM_GUI/LFP_Manager_PRM/Forms/fmxMain.cs
2026-02-11 10:10:43 +09:00

836 lines
25 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using LFP_Manager.Forms;
using LFP_Manager.Controls;
using LFP_Manager.DataStructure;
using LFP_Manager.Function;
using LFP_Manager.Threads;
using LFP_Manager.Utils;
namespace LFP_Manager.Forms
{
public partial class fmxMain : DevExpress.XtraEditors.XtraForm
{
#region VARIABLES
private fmxFwUpdate FwUpdateForm = null;
private fmxExcelFile DbControlFrom = null;
private CommConfig Config;
private DeviceSystemData SystemData;
private csCanThread canThread = null;
private csValueCanThread ValueCanThread = null;
private csDbThread dbThread = null;
private ucShelfStatus SystemStatus;
private bool Active = false;
#endregion
#region CONSTRUCTORS
public fmxMain()
{
InitializeComponent();
ComponentInit();
StructDataInit();
IniLoad();
DataInit();
ucCommConfig.OnStart += StartButtonClick;
uDataLog.OnUpdate += LogStatusUpdate;
edSystemId.Enabled = false;
SystemStatus.OnCommand += SetCmdToCan;
SystemStatus.OnMsgPrint += TestLogMessage;
SystemStatus.Start(0, ref Config, ref SystemData);
edSystemId.Enabled = true;
ModuleIdSet.OnCommand += SetCmdToCan;
//this.Text = String.Format("LFP SYSTEM [{0}] -- PR-LFP MODULE", Application.ProductVersion);
this.Text = String.Format("LFP SYSTEM [{0}] -- PR-LFP MODULE - [{1}]"
, Application.ProductVersion
, csConstData.CommType.CAN_MODEL[Config.TargetModelIndex]
);
tmrCheckThreadMsg.Start();
}
private void ComponentInit()
{
SystemStatus = ucSystem;
}
private void IniLoad()
{
Config = csIniControlFunction.IniLoad(Application.ExecutablePath, Config);
ucCommConfig.UpdateConfig(ref Config);
TypeChangedUpdate(ref Config);
}
private void StructDataInit()
{
SystemData = new DeviceSystemData();
Config = new CommConfig();
}
private void DataInit()
{
DataFunction.DataInit(ref SystemData, ref Config);
}
#endregion
#region BUTTON EVENT
private void ConfigButtonClick(object sender, EventArgs e)
{
foreach (Form frm in Application.OpenForms)
{
if (frm.Name == "fmxCommConfig")
{
frm.Activate();
return;
}
}
fmxCommConfig CommConfigForm = new fmxCommConfig();
CommConfigForm.Owner = this;
CommConfigForm.OnUpdate += UpdateConfig;
CommConfigForm.Show();
}
private void StopProcess()
{
if (canThread != null)
{
canThread.disposeThread();
canThread = null;
}
if (ValueCanThread != null)
{
ValueCanThread.disposeThread();
ValueCanThread = null;
}
if (dbThread != null)
{
dbThread.Stop();
dbThread.disposeThread();
dbThread = null;
}
Active = false;
edSystemId.Enabled = true;
chbPolling.Enabled = true;
DataInit();
UpdateData(this, ref SystemData);
}
private void StartProcessCAN()
{
// CAN MODE
int sId = 0;
if (edSystemId.Text != null)
sId = Convert.ToInt16(edSystemId.Text);
ucSystem.SystemIdSet(sId);
canThread = new csCanThread(sId, Config, ref SystemData);
canThread.OnUpdate += UpdateData;
canThread.OnDataRecv += CanRecvData;
canThread.OnPrint += PrintLogMessage;
if (canThread.Start(ref Config, sId, chbPolling.Checked))
{
Active = true;
edSystemId.Enabled = false;
chbPolling.Enabled = true;
if (chbPolling.Checked)
edSystemId.Enabled = false;
else
edSystemId.Enabled = true;
canThread.SetPolling(chbPolling.Checked, Convert.ToInt32(edSystemId.Text), ref SystemData);
SystemStatus.UpdateSystemId(Convert.ToInt32(edSystemId.Text));
dbThread = new csDbThread(ref Config, ref SystemData);
dbThread.Start(Config);
}
else
{
if (canThread != null)
{
canThread.disposeThread();
canThread = null;
}
}
}
private void StartProcessValueCAN()
{
int sId = 0;
if (edSystemId.Text != null)
sId = Convert.ToInt16(edSystemId.Text);
ucSystem.SystemIdSet(sId);
ValueCanThread = new csValueCanThread(sId, Config, ref SystemData);
ValueCanThread.OnUpdate += UpdateData;
ValueCanThread.OnDataRecv += CanRecvData;
ValueCanThread.OnPrint += PrintLogMessage;
if (ValueCanThread.Start(Config, sId, chbPolling.Checked))
{
Active = true;
edSystemId.Enabled = false;
chbPolling.Enabled = true;
if (chbPolling.Checked)
edSystemId.Enabled = false;
else
edSystemId.Enabled = true;
ValueCanThread.SetPolling(chbPolling.Checked, Convert.ToInt32(edSystemId.Text), ref SystemData);
SystemStatus.UpdateSystemId(Convert.ToInt32(edSystemId.Text));
dbThread = new csDbThread(ref Config, ref SystemData);
dbThread.Start(Config);
}
else
{
if (ValueCanThread != null)
{
ValueCanThread.disposeThread();
ValueCanThread = null;
}
}
}
private void StartButtonClick(object sender, EventArgs e)
{
if (Active)
{
StopProcess();
}
else
{
switch (Config.CommType)
{
case csConstData.CommType.COMM_USBCAN:
switch (csCanConstData.CanDeviceInfo.DeviceIds[Config.CanDevice])
{
case csCanConstData.CanDeviceInfo.VCI_VALUE_CAN4_1: // CAN MODE - ValueCAN
try
{
StartProcessValueCAN();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
if (ValueCanThread != null)
{
ValueCanThread.disposeThread();
ValueCanThread = null;
}
}
break;
default: // CAN MODE - USBCAN
try
{
StartProcessCAN();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
if (canThread != null)
{
canThread.disposeThread();
canThread = null;
}
}
break;
}
break;
}
}
if (canThread != null)
{
// USBCAN
ucCommConfig.UpdateStatus(Active, canThread.GetCommSystemId());
}
else if (ValueCanThread != null)
{
// Value CAN
ucCommConfig.UpdateStatus(Active, ValueCanThread.GetCommSystemId());
}
else
{ ucCommConfig.UpdateStatus(Active, 0); }
uDataLog.UpdateActiveStatus(Active, Config, ref SystemData);
}
#endregion
#region UPDATE FUNCTIONS
private void UpdateCommConfigStatus()
{
if (canThread != null)
{
// USBCAN
ucCommConfig.UpdateStatus(Active, canThread.GetCommSystemId());
}
else if (ValueCanThread != null)
{
// Value CAN
ucCommConfig.UpdateStatus(Active, ValueCanThread.GetCommSystemId());
}
else
{
ucCommConfig.UpdateStatus(Active, 0);
}
}
private void TypeChangedUpdate(ref CommConfig aConfig)
{
this.Text = String.Format("LFP SYSTEM [{0}] -- PR-LFP MODULE - [{1}]"
, Application.ProductVersion
, csConstData.CommType.CAN_MODEL[aConfig.TargetModelIndex]
);
switch (Config.TargetModelIndex)
{
case 0: // PR-57150
edMaxModule.Text = "18";
break;
case 1: // PR-64150
edMaxModule.Text = "3";
break;
case 2: // LFPM-57080
edMaxModule.Text = "18";
break;
case 3: // PR-102150
edMaxModule.Text = "11";
break;
case 4: // PR-115300
edMaxModule.Text = "10";
break;
case 5: // PR-67150
edMaxModule.Text = "3";
break;
default:
break;
}
DataInit();
switch (aConfig.CommType)
{
case csConstData.CommType.COMM_USBCAN:
SystemStatus.Start(0, ref Config, ref SystemData);
edSystemId.Enabled = true;
break;
case csConstData.CommType.COMM_UARTCAN:
SystemStatus.Start(0, ref Config, ref SystemData);
edSystemId.Enabled = true;
break;
}
}
private void UpdateData(object sender, ref DeviceSystemData rData)
{
//SystemData = rData;
//if (SystemStatus != null)
// SystemStatus.UpdateData(ref SystemData);
//if (uDataLog != null)
// uDataLog.UpdateData(ref SystemData);
//if (dbThread != null)
// dbThread.UpdateData(ref SystemData);
if (edSystemId.Text != string.Empty)
ModuleIdSet.UpdateData(Convert.ToInt32(edSystemId.Text), SystemData.CalibriationData);
}
private void CanRecvData(UInt32 hdr, byte[] data)
{
if (FwUpdateForm != null)
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(delegate()
{
FwUpdateForm.RecvData(hdr, data);
}));
}
else
{
FwUpdateForm.RecvData(hdr, data);
}
}
}
private void UpdateConfig(object aConfig)
{
Config = (CommConfig)aConfig;
IniLoad();
}
#endregion
#region MENU EVENT
private void commConfigToolStripMenuItem_Click(object sender, EventArgs e)
{
ConfigButtonClick(sender, e);
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
private void testSendToolStripMenuItem_Click(object sender, EventArgs e)
{
csHistoryFunction.DbCreate(System.IO.Path.GetDirectoryName(Application.ExecutablePath));
}
private void firmwareUpdateCANToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form frm in Application.OpenForms)
{
if (frm.Name == "fmxFwUpdate")
{
frm.Activate();
return;
}
}
FwUpdateForm = new fmxFwUpdate(Convert.ToUInt32(edSystemId.Text), Config);
FwUpdateForm.OnAutoTxCanSet += SetAutoTxCan;
FwUpdateForm.OnSendDataCan += SendDataToCan;
FwUpdateForm.Show();
}
private void firmwareImageConveterToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form frm in Application.OpenForms)
{
if (frm.Name == "fmxFwImageConverter")
{
frm.Activate();
return;
}
}
fmxFwImageConverter FwImageConverter = new fmxFwImageConverter();
FwImageConverter.Show();
}
private void historyViewToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form frm in Application.OpenForms)
{
if (frm.Name == "fmxHistory")
{
frm.Activate();
return;
}
}
fmxHistory HistoryForm = new fmxHistory(Config);
HistoryForm.Show();
}
private void checkDBToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form frm in Application.OpenForms)
{
if (frm.Name == "fmxExcelFile")
{
frm.Activate();
return;
}
}
DbControlFrom = new fmxExcelFile(Config);
DbControlFrom.Show();
}
#endregion
#region FORM EVENT
private void fmxMain_Load(object sender, EventArgs e)
{
}
private void fmxMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (canThread != null)
{
canThread.disposeThread();
canThread = null;
}
if (ValueCanThread != null)
{
ValueCanThread.disposeThread();
ValueCanThread = null;
}
if (dbThread != null)
{
dbThread.disposeThread();
dbThread = null;
}
}
#endregion
#region TIMER EVENT
private void tmrCheckThreadMsg_Tick(object sender, EventArgs e)
{
UpdateCommConfigStatus();
//if (snmpThread != null)
//{
// string data = snmpThread.GetResult();
// if (data != "")
// {
// uEventLog.EventUpdate(data + "\r\n");
// }
//}
//if (uartThread != null)
//{
// string data = uartThread.GetMsg();
// if (data != "")
// {
// uEventLog.EventUpdate(data + "\r\n");
// }
//}
//if (canThread != null)
//{
// string data = canThread.GetMsg();
// if (data != "")
// {
// uEventLog.EventUpdate(data + "\r\n");
// }
//}
//if (dbThread != null)
//{
// string data = dbThread.GetMsg();
// if (data != "")
// {
// uEventLog.EventUpdate(data + "\r\n");
// }
//}
byte[] sn = new byte[17];
switch (Config.CommType)
{
case csConstData.CommType.COMM_SNMP:
// SNMP MODE
break;
case csConstData.CommType.COMM_UARTCAN:
// UARTCAN MODE
for (int i = 0; i < 16; i++)
sn[i] = SystemData.Information.pcb_sn[i];
sn[16] = 0;
if (sn[0] == 0xFF) sn[0] = 0;
pgSystem.Text = String.Format("{0} [{1}.{2}.{3}.{4}] - {5}", "LFP SYSTEM"
, SystemData.ValueData.fw_ver[0]
, SystemData.ValueData.fw_ver[1]
, SystemData.ValueData.fw_ver[2]
, SystemData.ValueData.fw_ver[3]
, Encoding.Default.GetString(sn)
);
break;
case csConstData.CommType.COMM_USBCAN:
// USBCAN MODE
for (int i = 0; i < 16; i++)
sn[i] = SystemData.Information.pcb_sn[i];
sn[16] = 0;
if (sn[0] == 0xFF) sn[0] = 0;
pgSystem.Text = String.Format("{0} [{1}.{2}.{3}.{4}] - {5}", "LFP SYSTEM"
, SystemData.ValueData.fw_ver[0]
, SystemData.ValueData.fw_ver[1]
, SystemData.ValueData.fw_ver[2]
, SystemData.ValueData.fw_ver[3]
, Encoding.Default.GetString(sn)
);
break;
}
DisplayCommStaus();
}
#endregion
#region STATUS BAR EVENT
void DisplayCommStaus()
{
if (Active == true)
CommStausBar.Text = "Comm: On";
else
CommStausBar.Text = "Comm: Off";
}
void LogStatusUpdate(object sender, string msg, bool active, int aLogTime)
{
LogStatusBar.Text = msg;
}
#endregion
#region LOG PRINT FUCTION
private void PrintLogMessage(object sender, string msg)
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(delegate ()
{
uEventLog.EventUpdate(msg + "\r\n");
}));
}
else
{
uEventLog.EventUpdate(msg + "\r\n");
}
}
private void TestLogMessage(object sender, string msg)
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(delegate ()
{
uEventLog.MsgUpdate(msg + "\r\n");
}));
}
else
{
uEventLog.MsgUpdate(msg + "\r\n");
}
}
#endregion
#region CAN COMMAND AND SET
private void SetCmdToCan(int sId, int mode, int flag, ref DeviceParamData aParam, ref DeviceCalibration aCalib)
{
if (canThread != null)
{
canThread.SendProcessFromApp(sId, mode, flag, 0, ref aParam, ref aCalib);
}
else if (ValueCanThread != null)
{
ValueCanThread.SendProcessFromApp(sId, mode, flag, 0, ref aParam, ref aCalib);
}
}
private void chbPolling_CheckedChanged(object sender, EventArgs e)
{
if (edSystemId.Text != string.Empty)
{
if (canThread != null)
{
canThread.SetPolling(chbPolling.Checked, Convert.ToInt32(edSystemId.Text), ref SystemData);
}
if (ValueCanThread != null)
{
ValueCanThread.SetPolling(chbPolling.Checked, Convert.ToInt32(edSystemId.Text), ref SystemData);
}
SystemStatus.UpdateSystemId(Convert.ToInt32(edSystemId.Text));
if (chbPolling.Checked)
edSystemId.Enabled = false;
else
edSystemId.Enabled = true;
}
}
private void chkDcp_CheckedChanged(object sender, EventArgs e)
{
if (canThread != null)
{
if (chkDcp.Checked)
canThread.SetDcp(1);
else
canThread.SetDcp(0);
}
if (ValueCanThread != null)
{
if (chkDcp.Checked)
ValueCanThread.SetDCP(1);
else
ValueCanThread.SetDCP(0);
}
}
private void edSystemId_KeyPress(object sender, KeyPressEventArgs e)
{
csUtils.TypingOnlyNumber(sender, e, false, false);
}
private void SendDataToCan(UInt32 header, byte[] data)
{
if (canThread != null)
{
canThread.SendDataFromApp(header, data, 0);
}
else if (ValueCanThread != null)
{
ValueCanThread.SendDataFromApp(header, data);
}
}
private void SetAutoTxCan(bool autoTx)
{
if (canThread != null)
{
canThread.SetAutoTx(autoTx);
}
else if (ValueCanThread != null)
{
ValueCanThread.SetAutoTx(autoTx);
}
}
private void tmrTest_Tick(object sender, EventArgs e)
{
//string data = "";
//data += String.Format("S[{0}], ", SystemTotalData.AvgData.avgCellVoltage);
//data += String.Format("S[{0}], ", SystemTotalData.AvgData.maxCellVoltage);
//data += String.Format("S[{0}], ", SystemTotalData.AvgData.minCellVoltage);
//data += String.Format("S[{0}], ", SystemTotalData.AvgData.diffCellVoltage);
//data += String.Format("S[{0}], ", SystemTotalData.CellBalancingVoltage);
//for (int i = 0; i < Config.CanModelIndex + 1; i++)
//{
// data += String.Format("M-{0:00}[{1}], ", i + 1, SystemData.StatusData.cellBalanceValue);
//}
//if (data != "")
//{
// uEventLog.EventUpdate(data + "\r\n");
//}
}
private void btnNextID_Click(object sender, EventArgs e)
{
if (edSystemId.Text == "") return;
if (edMaxModule.Text == "") return;
int currID = Convert.ToInt32(edSystemId.Text);
int maxModule = Convert.ToInt32(edMaxModule.Text);
if (currID == maxModule)
currID = 1;
else
currID++;
edSystemId.Text = currID.ToString();
SystemData.mNo = currID;
if (canThread != null)
{
DataInit();
SystemStatus.UpdateSystemId(Convert.ToInt32(edSystemId.Text));
canThread.SetPolling(chbPolling.Checked, Convert.ToInt32(edSystemId.Text), ref SystemData);
}
else if (ValueCanThread != null)
{
DataInit();
SystemStatus.UpdateSystemId(Convert.ToInt32(edSystemId.Text));
ValueCanThread.SetPolling(chbPolling.Checked, Convert.ToInt32(edSystemId.Text), ref SystemData);
}
}
private void btnPrevID_Click(object sender, EventArgs e)
{
if (edSystemId.Text == "") return;
if (edMaxModule.Text == "") return;
int currID = Convert.ToInt32(edSystemId.Text);
int maxModule = Convert.ToInt32(edMaxModule.Text);
if (currID == 1)
currID = maxModule;
else if (currID > 0)
currID--;
else
currID = 1;
edSystemId.Text = currID.ToString();
SystemData.mNo = currID;
if (canThread != null)
{
DataInit();
SystemStatus.UpdateSystemId(Convert.ToInt32(edSystemId.Text));
canThread.SetPolling(chbPolling.Checked, Convert.ToInt32(edSystemId.Text), ref SystemData);
}
else if (ValueCanThread != null)
{
DataInit();
SystemStatus.UpdateSystemId(Convert.ToInt32(edSystemId.Text));
ValueCanThread.SetPolling(chbPolling.Checked, Convert.ToInt32(edSystemId.Text), ref SystemData);
}
}
private void edMaxModule_EditValueChanged(object sender, EventArgs e)
{
try
{
int id = Convert.ToInt32(edMaxModule.Text);
ModuleIdSet.SetMaxModule(id);
}
catch (Exception ex)
{
MessageBox.Show("EditValue change error: " + ex.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
#endregion
}
}