1239 lines
43 KiB
C#
1239 lines
43 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;
|
|
using DevExpress.Utils.Drawing.Helpers;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace LFP_Manager.Forms
|
|
{
|
|
public partial class fmxMain : DevExpress.XtraEditors.XtraForm
|
|
{
|
|
#region VARIABLES
|
|
|
|
// Child form
|
|
private fmxInventoryConfig InventoryConfig = null;
|
|
private fmxModuleDetail ModuleDetailForm = null;
|
|
private fmxFwUpdate FwUpdateForm = null;
|
|
private fmxHistory HistoryForm = null;
|
|
|
|
// Static Variables
|
|
private CommConfig Config = new CommConfig();
|
|
private DeviceSystemTotalData SystemTotalData;
|
|
private DeviceSystemData[] SystemData;
|
|
|
|
// Thread Variables
|
|
private csUartThread uartThread = null;
|
|
private CsUartThread124050 rs232Thread124050 = null;
|
|
private CsUartThreadDelta rs485Thread = null;
|
|
private CsRs485Thread124050 rs485Thread124050 = null;
|
|
private CsSnmpThread snmpThread = null;
|
|
private CsSnmpThread124050 snmpThread124050 = null;
|
|
|
|
private csDbThread dbThread = null;
|
|
|
|
private ucMainStatus MainStatus = null;
|
|
private ucShelfStatus ShelfStatus = null;
|
|
|
|
private int ModuleID = 1;
|
|
|
|
bool Active = false;
|
|
|
|
#endregion
|
|
|
|
#region CONSTRUCTORS
|
|
|
|
public fmxMain()
|
|
{
|
|
InitializeComponent();
|
|
|
|
StructDataInit();
|
|
//DataInit();
|
|
|
|
IniLoad(ref Config);
|
|
|
|
uTarget.OnConfig += ConfigButtonClick;
|
|
uTarget.OnStart += StartButtonClick;
|
|
|
|
uDataLog.OnUpdate += LogStatusUpdate;
|
|
|
|
DisplaySystemFwVerModule();
|
|
}
|
|
|
|
private void IniLoad(ref CommConfig aConfig)
|
|
{
|
|
csIniControlFunction.IniLoad(Application.ExecutablePath, ref aConfig);
|
|
|
|
uTarget.UpdateConfig(ref aConfig);
|
|
|
|
TypeChangedUpdate(ref aConfig);
|
|
}
|
|
|
|
private void StructDataInit()
|
|
{
|
|
SystemTotalData = new DeviceSystemTotalData
|
|
{
|
|
ValueData = new DeviceValueTotalData(),
|
|
StatusData = new DeviceStatusTotalData()
|
|
};
|
|
|
|
SystemData = new DeviceSystemData[csConstData.SystemInfo.MAX_MODULE_SIZE];
|
|
|
|
for (int i = 0; i < csConstData.SystemInfo.MAX_MODULE_SIZE; i++)
|
|
{
|
|
SystemData[i] = new DeviceSystemData();
|
|
}
|
|
}
|
|
|
|
#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
|
|
{
|
|
Owner = this
|
|
};
|
|
|
|
CommConfigForm.OnUpdate += UpdateConfig;
|
|
CommConfigForm.Show();
|
|
}
|
|
|
|
private void StartButtonClick(object sender, EventArgs e)
|
|
{
|
|
if (Active)
|
|
{
|
|
StructDataInit();
|
|
|
|
switch (Config.CommType)
|
|
{
|
|
case csConstData.CommType.COMM_UART:
|
|
switch (Config.UartModelIndex)
|
|
{
|
|
case csConstData.MODEL_INDEX.LFPM_124050D: // AMG Protocol
|
|
if (rs232Thread124050 != null)
|
|
{
|
|
rs232Thread124050.disposeThread();
|
|
rs232Thread124050 = null;
|
|
UpdateDataUart(this, ref SystemData[ModuleID - 1]);
|
|
|
|
edModuleID.Enabled = true;
|
|
chbPolling.Enabled = true;
|
|
}
|
|
break;
|
|
default:
|
|
if (uartThread != null)
|
|
{
|
|
uartThread.disposeThread();
|
|
uartThread = null;
|
|
UpdateDataUart(this, ref SystemData[ModuleID - 1]);
|
|
|
|
edModuleID.Enabled = true;
|
|
chbPolling.Enabled = true;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case csConstData.CommType.COMM_RS485:
|
|
// DELTA Protocol
|
|
switch (Config.UartModelIndex)
|
|
{
|
|
case csConstData.MODEL_INDEX.LFPM_124050D:
|
|
if (rs485Thread124050 != null)
|
|
{
|
|
rs485Thread124050.disposeThread();
|
|
rs485Thread124050 = null;
|
|
UpdateDataRS485(this, ref SystemData);
|
|
|
|
edModuleID.Enabled = true;
|
|
chbPolling.Enabled = true;
|
|
}
|
|
break;
|
|
default:
|
|
if (rs485Thread != null)
|
|
{
|
|
rs485Thread.disposeThread();
|
|
rs485Thread = null;
|
|
UpdateDataRS485(this, ref SystemData);
|
|
|
|
edModuleID.Enabled = true;
|
|
chbPolling.Enabled = true;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case csConstData.CommType.COMM_SNMP:
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (snmpThread != null)
|
|
{
|
|
snmpThread.disposeThread();
|
|
snmpThread = null;
|
|
UpdateSnmpData(this, ref SystemData[0]);
|
|
}
|
|
|
|
if (snmpThread124050 != null)
|
|
{
|
|
snmpThread124050.Dispose();
|
|
snmpThread124050 = null;
|
|
UpdateSnmpData(this, ref SystemData[0]);
|
|
}
|
|
|
|
if (dbThread != null)
|
|
{
|
|
dbThread.disposeThread();
|
|
dbThread = null;
|
|
}
|
|
|
|
Active = false;
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
ModuleID = Convert.ToInt16(edModuleID.Text);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
MessageBox.Show("Wrong Module ID - Please check module ID", "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
|
|
switch (Config.CommType)
|
|
{
|
|
case csConstData.CommType.COMM_UART:
|
|
// UART MODE - RS-232
|
|
switch (Config.UartModelIndex)
|
|
{
|
|
case csConstData.MODEL_INDEX.LFPM_124050D:
|
|
CommUARTStart124050();
|
|
break;
|
|
default:
|
|
CommUARTStart();
|
|
break;
|
|
}
|
|
break;
|
|
case csConstData.CommType.COMM_RS485:
|
|
// UART MODE - RS-485
|
|
switch (Config.UartModelIndex)
|
|
{
|
|
case csConstData.MODEL_INDEX.LFPM_124050D:
|
|
CommRS485_124050_Start();
|
|
break;
|
|
default:
|
|
CommRS485Start();
|
|
break;
|
|
}
|
|
break;
|
|
case csConstData.CommType.COMM_SNMP:
|
|
switch (Config.SnmpModelIndex)
|
|
{
|
|
case csConstData.MODEL_INDEX.LFPM_124050D:
|
|
StartProcessSNMP124050();
|
|
break;
|
|
default:
|
|
StartProcessSNMP();
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
uTarget.UpdateStatus(Active);
|
|
uDataLog.UpdateActiveStatus(Active, ModuleID, Config, SystemData);
|
|
DisplayCommStatus();
|
|
}
|
|
|
|
private void UartRecvData(byte[] data)
|
|
{
|
|
if (this.InvokeRequired)
|
|
{
|
|
this.Invoke(new MethodInvoker(delegate ()
|
|
{
|
|
FwUpdateForm?.RecvData(data);
|
|
HistoryForm?.RecvUardData(data);
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
FwUpdateForm?.RecvData(data);
|
|
HistoryForm?.RecvUardData(data);
|
|
}
|
|
}
|
|
|
|
private void CommUARTStart()
|
|
{
|
|
try
|
|
{
|
|
uartThread = new csUartThread(ModuleID, Config, ref SystemData[ModuleID - 1]);
|
|
uartThread.OnUpdate += UpdateDataUart;
|
|
uartThread.OnDataRecv += UartRecvData;
|
|
uartThread.OnPrint += CommDataPrint;
|
|
uartThread.SetPolling(chbPolling.Checked, ModuleID, ref SystemData[ModuleID - 1]);
|
|
|
|
if (uartThread.Start(ref Config, ModuleID, chbPolling.Checked))
|
|
{
|
|
Active = true;
|
|
edModuleID.Enabled = false;
|
|
chbPolling.Enabled = true;
|
|
|
|
if (chbPolling.Checked)
|
|
edModuleID.Enabled = false;
|
|
else
|
|
edModuleID.Enabled = true;
|
|
|
|
uartThread.SetPolling(chbPolling.Checked, ModuleID, ref SystemData[ModuleID - 1]);
|
|
ShelfStatus?.UpdateSystemId(ModuleID);
|
|
|
|
dbThread = new csDbThread(ModuleID, Config, SystemData);
|
|
dbThread.Start(ModuleID, Config);
|
|
}
|
|
else
|
|
{
|
|
if (uartThread != null)
|
|
{
|
|
uartThread.disposeThread();
|
|
uartThread = null;
|
|
}
|
|
if (dbThread != null)
|
|
{
|
|
dbThread.disposeThread();
|
|
dbThread = null;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
if (uartThread != null)
|
|
{
|
|
uartThread.disposeThread();
|
|
uartThread = null;
|
|
}
|
|
if (dbThread != null)
|
|
{
|
|
dbThread.disposeThread();
|
|
dbThread = null;
|
|
}
|
|
}
|
|
}
|
|
private void CommUARTStart124050()
|
|
{
|
|
try
|
|
{
|
|
rs232Thread124050 = new CsUartThread124050(ModuleID, Config, ref SystemData[ModuleID - 1]);
|
|
rs232Thread124050.OnUpdate += UpdateDataUart;
|
|
rs232Thread124050.OnDataRecv += UartRecvData;
|
|
rs232Thread124050.OnPrint += CommDataPrint;
|
|
rs232Thread124050.SetPolling(chbPolling.Checked, ModuleID, ref SystemData[ModuleID - 1]);
|
|
|
|
if (rs232Thread124050.Start(ref Config, ModuleID, chbPolling.Checked))
|
|
{
|
|
// UI 스레드에서 실행 보장
|
|
this.Invoke((Action)(() =>
|
|
{
|
|
Active = true;
|
|
edModuleID.Enabled = false;
|
|
chbPolling.Enabled = true;
|
|
|
|
edModuleID.Enabled = !chbPolling.Checked;
|
|
|
|
rs232Thread124050.SetPolling(chbPolling.Checked, ModuleID, ref SystemData[ModuleID - 1]);
|
|
ShelfStatus?.UpdateSystemId(ModuleID);
|
|
|
|
dbThread = new csDbThread(ModuleID, Config, SystemData);
|
|
dbThread.Start(ModuleID, Config);
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
if (rs232Thread124050 != null)
|
|
{
|
|
rs232Thread124050.disposeThread();
|
|
rs232Thread124050 = null;
|
|
}
|
|
if (dbThread != null)
|
|
{
|
|
dbThread.disposeThread();
|
|
dbThread = null;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Active = false;
|
|
|
|
if (rs232Thread124050 != null)
|
|
{
|
|
rs232Thread124050.disposeThread();
|
|
rs232Thread124050 = null;
|
|
}
|
|
if (dbThread != null)
|
|
{
|
|
dbThread.disposeThread();
|
|
dbThread = null;
|
|
}
|
|
|
|
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
|
|
private void CommRS485Start()
|
|
{
|
|
try
|
|
{
|
|
rs485Thread = new CsUartThreadDelta(ModuleID, Config, ref SystemData);
|
|
rs485Thread.OnUpdate += UpdateDataRS485;
|
|
rs485Thread.OnDataRecv += UartRecvData;
|
|
rs485Thread.OnPrint += CommDataPrint;
|
|
rs485Thread.SetPolling(chbPolling.Checked, ModuleID, ref SystemData);
|
|
|
|
if (rs485Thread.Start(ref Config, ModuleID, chbPolling.Checked))
|
|
{
|
|
Active = true;
|
|
edModuleID.Enabled = false;
|
|
chbPolling.Enabled = true;
|
|
|
|
edModuleID.Enabled = !chbPolling.Checked;
|
|
|
|
rs485Thread.SetPolling(chbPolling.Checked, ModuleID, ref SystemData);
|
|
ShelfStatus?.UpdateSystemId(ModuleID);
|
|
|
|
dbThread = new csDbThread(ModuleID, Config, SystemData);
|
|
dbThread.Start(ModuleID, Config);
|
|
}
|
|
else
|
|
{
|
|
if (rs485Thread != null)
|
|
{
|
|
rs485Thread.disposeThread();
|
|
rs485Thread = null;
|
|
}
|
|
if (dbThread != null)
|
|
{
|
|
dbThread.disposeThread();
|
|
dbThread = null;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
if (rs485Thread != null)
|
|
{
|
|
rs485Thread.disposeThread();
|
|
rs485Thread = null;
|
|
}
|
|
if (dbThread != null)
|
|
{
|
|
dbThread.disposeThread();
|
|
dbThread = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void CommRS485_124050_Start()
|
|
{
|
|
try
|
|
{
|
|
rs485Thread124050 = new CsRs485Thread124050(ModuleID, Config, ref SystemData);
|
|
rs485Thread124050.OnUpdate += UpdateDataRS485;
|
|
rs485Thread124050.OnDataRecv += UartRecvData;
|
|
rs485Thread124050.OnPrint += CommDataPrint;
|
|
rs485Thread124050.SetPolling(chbPolling.Checked, ModuleID, ref SystemData);
|
|
|
|
if (rs485Thread124050.Start(ref Config, ModuleID, chbPolling.Checked))
|
|
{
|
|
Active = true;
|
|
edModuleID.Enabled = false;
|
|
chbPolling.Enabled = true;
|
|
|
|
edModuleID.Enabled = !chbPolling.Checked;
|
|
|
|
rs485Thread124050.SetPolling(chbPolling.Checked, ModuleID, ref SystemData);
|
|
ShelfStatus?.UpdateSystemId(ModuleID);
|
|
|
|
dbThread = new csDbThread(ModuleID, Config, SystemData);
|
|
dbThread.Start(ModuleID, Config);
|
|
}
|
|
else
|
|
{
|
|
if (rs485Thread124050 != null)
|
|
{
|
|
rs485Thread124050.disposeThread();
|
|
rs485Thread124050 = null;
|
|
}
|
|
if (dbThread != null)
|
|
{
|
|
dbThread.disposeThread();
|
|
dbThread = null;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
if (rs485Thread124050 != null)
|
|
{
|
|
rs485Thread124050.disposeThread();
|
|
rs485Thread124050 = null;
|
|
}
|
|
if (dbThread != null)
|
|
{
|
|
dbThread.disposeThread();
|
|
dbThread = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void StartProcessSNMP()
|
|
{
|
|
try
|
|
{
|
|
snmpThread = new CsSnmpThread(Config, ref SystemData[ModuleID - 1]);
|
|
snmpThread.OnUpdate += UpdateSnmpData;
|
|
snmpThread.OnSetResult += SnmpRecvData;
|
|
snmpThread.Start(Config.SnmpIP, chbPolling.Checked);
|
|
|
|
Active = true;
|
|
|
|
dbThread = new csDbThread(ModuleID, Config, SystemData);
|
|
dbThread.Start(ModuleID, Config);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
if (snmpThread == null)
|
|
{
|
|
snmpThread.disposeThread();
|
|
snmpThread = null;
|
|
}
|
|
if (dbThread != null)
|
|
{
|
|
dbThread.disposeThread();
|
|
dbThread = null;
|
|
}
|
|
}
|
|
}
|
|
private void StartProcessSNMP124050()
|
|
{
|
|
try
|
|
{
|
|
snmpThread124050 = new CsSnmpThread124050(Config, ref SystemData[ModuleID - 1]);
|
|
snmpThread124050.OnUpdate += UpdateSnmpData;
|
|
snmpThread124050.OnSetResult += SnmpRecvData;
|
|
snmpThread124050.Start(Config.SnmpIP, chbPolling.Checked);
|
|
|
|
Active = true;
|
|
|
|
dbThread = new csDbThread(ModuleID, Config, SystemData);
|
|
dbThread.Start(ModuleID, Config);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
if (snmpThread124050 == null)
|
|
{
|
|
snmpThread124050.Dispose();
|
|
snmpThread124050 = null;
|
|
}
|
|
if (dbThread != null)
|
|
{
|
|
dbThread.disposeThread();
|
|
dbThread = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region UPDATE FUNCTIONS
|
|
|
|
private void TypeChangeUpdateUart(ref CommConfig aConfig)
|
|
{
|
|
tabStatus.TabPages[0].PageVisible = true;
|
|
for (int i = 1; i < tabStatus.TabPages.Count; i++)
|
|
{
|
|
tabStatus.TabPages[i].PageVisible = false;
|
|
}
|
|
tabStatus.TabPages[0].Text = String.Format("LFP Module [{0}.{1}.{2}.{3}]"
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
);
|
|
ShelfStatus = new ucShelfStatus();
|
|
ShelfStatus.OnCommand += SetCmdEvent;
|
|
ShelfStatus.Dock = DockStyle.Fill;
|
|
|
|
tabStatus.TabPages[0].PageVisible = true;
|
|
tabStatus.TabPages[0].Controls.Add(ShelfStatus);
|
|
|
|
ShelfStatus.Start(Convert.ToInt32(edModuleID.Text), ref aConfig, ref SystemData);
|
|
|
|
edModuleID.Enabled = true;
|
|
chbPolling.Enabled = true;
|
|
}
|
|
private void TypeChangeUpdateRS485(ref CommConfig aConfig)
|
|
{
|
|
// Display Screen Delete
|
|
if (MainStatus != null)
|
|
{
|
|
MainStatus.Dispose();
|
|
MainStatus = null;
|
|
}
|
|
|
|
if (ShelfStatus != null)
|
|
{
|
|
ShelfStatus.Dispose();
|
|
ShelfStatus = null;
|
|
}
|
|
if (aConfig.ModuleQty > 1)
|
|
{
|
|
// All disable first
|
|
for (int i = 0; i < tabStatus.TabPages.Count; i++)
|
|
{
|
|
tabStatus.TabPages[i].PageVisible = false;
|
|
}
|
|
|
|
MainStatus = new ucMainStatus();
|
|
MainStatus.OnCommand += SetCmdEvent;
|
|
|
|
tabStatus.TabPages[0].Text = string.Format("LFP System");
|
|
tabStatus.TabPages[0].PageVisible = true;
|
|
tabStatus.TabPages[0].Controls.Add(MainStatus);
|
|
MainStatus.Dock = DockStyle.Fill;
|
|
MainStatus.UpdateMainConfig(ref Config, ref SystemData);
|
|
|
|
//SystemTotalData.IdentData.ModuleQuantity = Config.ModuleQty;
|
|
|
|
edModuleID.Enabled = false;
|
|
chbPolling.Enabled = false;
|
|
}
|
|
else
|
|
{
|
|
tabStatus.TabPages[0].PageVisible = true;
|
|
for (int i = 1; i < tabStatus.TabPages.Count; i++)
|
|
{
|
|
tabStatus.TabPages[i].PageVisible = false;
|
|
}
|
|
tabStatus.TabPages[0].Text = String.Format("LFP Module [{0}.{1}.{2}.{3}]"
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
);
|
|
ShelfStatus = new ucShelfStatus();
|
|
ShelfStatus.OnCommand += SetCmdEvent;
|
|
ShelfStatus.OnSendUartData += SetWriteData;
|
|
ShelfStatus.Dock = DockStyle.Fill;
|
|
|
|
tabStatus.TabPages[0].PageVisible = true;
|
|
tabStatus.TabPages[0].Controls.Add(ShelfStatus);
|
|
|
|
ShelfStatus.Start(ModuleID, ref aConfig, ref SystemData);
|
|
|
|
edModuleID.Enabled = true;
|
|
chbPolling.Enabled = true;
|
|
}
|
|
}
|
|
private void TypeChangeUpdateSnmp(ref CommConfig aConfig)
|
|
{
|
|
tabStatus.TabPages[0].PageVisible = true;
|
|
for (int i = 1; i < tabStatus.TabPages.Count; i++)
|
|
{
|
|
tabStatus.TabPages[i].PageVisible = false;
|
|
}
|
|
tabStatus.TabPages[0].Text = String.Format("LFP Module [{0}.{1}.{2}.{3}]"
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
);
|
|
ShelfStatus = new ucShelfStatus();
|
|
ShelfStatus.OnCommand += SetCmdEvent;
|
|
ShelfStatus.Dock = DockStyle.Fill;
|
|
|
|
tabStatus.TabPages[0].PageVisible = true;
|
|
tabStatus.TabPages[0].Controls.Add(ShelfStatus);
|
|
|
|
ShelfStatus.Start(ModuleID, ref aConfig, ref SystemData);
|
|
|
|
edModuleID.Enabled = false;
|
|
chbPolling.Enabled = true;
|
|
}
|
|
|
|
private void TypeChangedUpdate(ref CommConfig aConfig)
|
|
{
|
|
// Display Screen Deletes
|
|
if (ShelfStatus != null)
|
|
{
|
|
ShelfStatus.Dispose();
|
|
ShelfStatus = null;
|
|
}
|
|
|
|
SetCellTempQty(aConfig, ref SystemData);
|
|
try
|
|
{
|
|
ModuleID = Convert.ToInt16(edModuleID.Text);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
ModuleID = 1;
|
|
}
|
|
|
|
switch (aConfig.CommType)
|
|
{
|
|
case csConstData.CommType.COMM_UART:
|
|
TypeChangeUpdateUart(ref aConfig);
|
|
historyToolStripMenuItem.Visible = true;
|
|
inventoryViewToolStripMenuItem.Visible = true;
|
|
updateToolStripMenuItem.Visible = false;
|
|
break;
|
|
case csConstData.CommType.COMM_RS485:
|
|
TypeChangeUpdateRS485(ref aConfig);
|
|
historyToolStripMenuItem.Visible = true;
|
|
inventoryViewToolStripMenuItem.Visible = false;
|
|
updateToolStripMenuItem.Visible = true;
|
|
break;
|
|
case csConstData.CommType.COMM_SNMP:
|
|
TypeChangeUpdateSnmp(ref aConfig);
|
|
historyToolStripMenuItem.Visible = true;
|
|
inventoryViewToolStripMenuItem.Visible = false;
|
|
updateToolStripMenuItem.Visible = false;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
//DisplayCommStatus();
|
|
}
|
|
|
|
private void SetCellTempQty(CommConfig aConfig, ref DeviceSystemData[] SystemData)
|
|
{
|
|
switch (aConfig.CommType)
|
|
{
|
|
case csConstData.CommType.COMM_UART:
|
|
case csConstData.CommType.COMM_RS485:
|
|
switch (aConfig.UartModelIndex)
|
|
{
|
|
case csConstData.MODEL_INDEX.LFPM_48100D:
|
|
case csConstData.MODEL_INDEX.LFPM_48150D:
|
|
case csConstData.MODEL_INDEX.LFPM_48200D:
|
|
case csConstData.MODEL_INDEX.LFPM_48250D:
|
|
case csConstData.MODEL_INDEX.LFPM_48300D:
|
|
for (int i = 0; i < SystemData.Length; i++)
|
|
{
|
|
SystemData[i].cellQty = 15;
|
|
SystemData[i].tempQty = 4;
|
|
}
|
|
break;
|
|
case csConstData.MODEL_INDEX.LFPM_124050D:
|
|
for (int i = 0; i < SystemData.Length; i++)
|
|
{
|
|
SystemData[i].cellQty = csConstData.SystemInfo.MAX_MODULE_CELL_SIZE;
|
|
SystemData[i].tempQty = csConstData.SystemInfo.MAX_MODULE_TEMP_SIZE;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
case csConstData.CommType.COMM_SNMP:
|
|
switch (aConfig.SnmpModelIndex)
|
|
{
|
|
case csConstData.MODEL_INDEX.LFPM_48100D:
|
|
case csConstData.MODEL_INDEX.LFPM_48150D:
|
|
case csConstData.MODEL_INDEX.LFPM_48200D:
|
|
case csConstData.MODEL_INDEX.LFPM_48250D:
|
|
case csConstData.MODEL_INDEX.LFPM_48300D:
|
|
for (int i = 0; i < SystemData.Length; i++)
|
|
{
|
|
SystemData[i].cellQty = 15;
|
|
SystemData[i].tempQty = 4;
|
|
}
|
|
break;
|
|
case csConstData.MODEL_INDEX.LFPM_124050D:
|
|
for (int i = 0; i < SystemData.Length; i++)
|
|
{
|
|
SystemData[i].cellQty = csConstData.SystemInfo.MAX_MODULE_CELL_SIZE;
|
|
SystemData[i].tempQty = csConstData.SystemInfo.MAX_MODULE_TEMP_SIZE;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
for (int i = 0; i < SystemData.Length; i++)
|
|
{
|
|
SystemData[i].cellQty = 15;
|
|
SystemData[i].tempQty = 4;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void UpdateDataUart(object sender, ref DeviceSystemData rData)
|
|
{
|
|
ShelfStatus?.UpdateData(ref SystemData);
|
|
dbThread?.UpdateData(ModuleID, SystemData);
|
|
uDataLog.UpdateData(SystemData);
|
|
}
|
|
private void UpdateDataRS485(object sender, ref DeviceSystemData[] rData)
|
|
{
|
|
ShelfStatus?.UpdateData(ref SystemData);
|
|
dbThread?.UpdateData(ModuleID, SystemData);
|
|
uDataLog.UpdateData(SystemData);
|
|
}
|
|
|
|
private void DisplaySystemFwVerModule()
|
|
{
|
|
switch (Config.ControlLevel)
|
|
{
|
|
case 0: // User Level
|
|
inventoryViewToolStripMenuItem.Visible = false;
|
|
break;
|
|
case 1: // Technician Level
|
|
inventoryViewToolStripMenuItem.Visible = false;
|
|
break;
|
|
case 2: // Engineer Level
|
|
inventoryViewToolStripMenuItem.Visible = false;
|
|
break;
|
|
case 3: // Master Level
|
|
inventoryViewToolStripMenuItem.Visible = true;
|
|
break;
|
|
default: // User Level
|
|
inventoryViewToolStripMenuItem.Visible = false;
|
|
break;
|
|
}
|
|
|
|
switch (Config.ControlLevel)
|
|
{
|
|
case 0: // User Level
|
|
this.Text = String.Format("LFP SYSTEM [{0}] -- DELTA - User Level", Application.ProductVersion);
|
|
break;
|
|
case 1: // Technician Level
|
|
this.Text = String.Format("LFP SYSTEM [{0}] -- DELTA - Technician Level", Application.ProductVersion);
|
|
break;
|
|
case 2: // Engineer Level
|
|
this.Text = String.Format("LFP SYSTEM [{0}] -- DELTA - Engineer Level", Application.ProductVersion);
|
|
break;
|
|
case 3: // Master Level
|
|
this.Text = String.Format("LFP SYSTEM [{0}] -- DELTA - Master Level", Application.ProductVersion);
|
|
break;
|
|
default:
|
|
this.Text = String.Format("LFP SYSTEM [{0}] -- DELTA - User Level", Application.ProductVersion);
|
|
break;
|
|
}
|
|
|
|
if (this.InvokeRequired)
|
|
{
|
|
this.Invoke(new MethodInvoker(delegate ()
|
|
{
|
|
if (SystemData[0].ValueData.fw_ver[0] != 0x00)
|
|
{
|
|
byte[] sn = new byte[33];
|
|
for (int i = 0; i < 32; i++)
|
|
sn[i] = SystemData[0].Information.BMS_SN[i];
|
|
sn[32] = 0;
|
|
|
|
tabStatus.TabPages[0].Text = String.Format("{0} [{1}] - {2}", "LFP MODULE"
|
|
, Encoding.UTF8.GetString(SystemData[0].ValueData.fw_ver)
|
|
, Encoding.Default.GetString(sn).Trim('\0')
|
|
);
|
|
}
|
|
else
|
|
{
|
|
tabStatus.TabPages[0].Text = String.Format("LFP MODULE");
|
|
}
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
if (SystemData[0].ValueData.fw_ver[0] != 0x00)
|
|
{
|
|
byte[] sn = new byte[17];
|
|
for (int i = 0; i < 16; i++)
|
|
sn[i] = SystemData[0].Information.BMS_SN[i]; //22.06.30 Byul 32->16
|
|
sn[16] = 0;
|
|
|
|
tabStatus.TabPages[0].Text = String.Format("{0} [{1}] - {2}", "LFP MODULE"
|
|
, Encoding.UTF8.GetString(SystemData[0].ValueData.fw_ver).Trim('\0')
|
|
, Encoding.Default.GetString(sn).Trim('\0')
|
|
);
|
|
}
|
|
else
|
|
{
|
|
tabStatus.TabPages[0].Text = String.Format("LFP MODULE");
|
|
}
|
|
}
|
|
}
|
|
|
|
private void UpdateSnmpData(object sender, ref DeviceSystemData rData)
|
|
{
|
|
uDataLog.UpdateData(SystemData);
|
|
}
|
|
|
|
private void UpdateConfig(object aConfig)
|
|
{
|
|
Config = (CommConfig)aConfig;
|
|
|
|
IniLoad(ref Config);
|
|
}
|
|
|
|
#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 firmwareUpdateToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
if ((rs485Thread == null) && (rs485Thread124050 == null))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (rs485Thread124050 != null)
|
|
{
|
|
FwUpdateForm = new fmxFwUpdate(rs485Thread124050.ModuleID);
|
|
}
|
|
else
|
|
{
|
|
FwUpdateForm = new fmxFwUpdate(rs485Thread.ModuleID);
|
|
}
|
|
|
|
FwUpdateForm.OnAutoTxSet += SetAutoTx;
|
|
FwUpdateForm.OnSendUartData += SetWriteData;
|
|
FwUpdateForm.ShowDialog();
|
|
}
|
|
|
|
private void historyViewToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
foreach (Form frm in Application.OpenForms)
|
|
{
|
|
if (frm.Name == "fmxHistory")
|
|
{
|
|
frm.Activate();
|
|
return;
|
|
}
|
|
}
|
|
HistoryForm = new fmxHistory(Config, ModuleID);
|
|
|
|
HistoryForm.OnSendUartData += SetWriteData;
|
|
HistoryForm.ShowDialog();
|
|
}
|
|
|
|
private void inventoryViewToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
foreach (Form frm in Application.OpenForms)
|
|
{
|
|
if (frm.Name == "fmxInventoryConfig")
|
|
{
|
|
frm.Activate();
|
|
return;
|
|
}
|
|
}
|
|
InventoryConfig = new fmxInventoryConfig(ModuleID, ref Config, ref SystemData[ModuleID - 1]);
|
|
|
|
InventoryConfig.OnSendUartData += SetWriteData;
|
|
InventoryConfig.Show();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region FORM EVENT
|
|
|
|
private void fmxMain_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
if (uartThread != null)
|
|
{
|
|
uartThread.disposeThread();
|
|
uartThread = null;
|
|
}
|
|
if (rs232Thread124050 != null)
|
|
{
|
|
rs232Thread124050.disposeThread();
|
|
rs232Thread124050 = null;
|
|
}
|
|
if (rs485Thread != null)
|
|
{
|
|
rs485Thread.disposeThread();
|
|
rs485Thread = null;
|
|
}
|
|
if (rs485Thread124050 != null)
|
|
{
|
|
rs485Thread124050.disposeThread();
|
|
rs485Thread124050 = null;
|
|
}
|
|
if (dbThread != null)
|
|
{
|
|
dbThread.disposeThread();
|
|
dbThread = null;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region STATUS BAR EVENT
|
|
|
|
void DisplayCommStatus()
|
|
{
|
|
if (Active == true)
|
|
CommStatusBar.Text = "Comm: On";
|
|
else
|
|
CommStatusBar.Text = "Comm: Off";
|
|
}
|
|
|
|
void DisplayCommStatus(string msg)
|
|
{
|
|
if (msg != "")
|
|
CommStatusBar.Text = String.Format("Comm: {0}", msg);
|
|
}
|
|
|
|
void LogStatusUpdate(object sender, string msg, bool active, int aLogTime)
|
|
{
|
|
LogStatusBar.Text = msg;
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region COMMAND AND SET
|
|
|
|
private void CommDataPrint(object sender, string msg)
|
|
{
|
|
if (msg != "")
|
|
{
|
|
uEventLog.EventUpdate(msg + "\r\n");
|
|
}
|
|
}
|
|
|
|
private void SetWriteData(ushort WriteAddr, byte[] WriteData, bool RelyFlag, int type)
|
|
{
|
|
uartThread?.SetWriteReg(WriteAddr, WriteData, RelyFlag, type);
|
|
rs232Thread124050?.SetWriteReg(WriteAddr, WriteData, RelyFlag, type);
|
|
rs485Thread?.SetWriteReg(WriteAddr, WriteData, RelyFlag, type);
|
|
rs485Thread124050?.SetWriteReg(WriteAddr, WriteData, RelyFlag, type);
|
|
}
|
|
|
|
private void SetCmdEvent(int sId, int cmd, int index, int flag, ref DeviceParamData aParam, ref DeviceCalibration aCalib)
|
|
{
|
|
if (MainStatus != null)
|
|
{
|
|
switch (cmd)
|
|
{
|
|
case 1: // Module quatity set
|
|
break;
|
|
case 2:
|
|
CreateModuleDetailForm(sId);
|
|
break;
|
|
}
|
|
}
|
|
uartThread?.SendProcessFromApp(sId, cmd, index, flag, ref aParam, ref aCalib);
|
|
rs232Thread124050?.SendProcessFromApp(sId, cmd, index, flag, ref aParam, ref aCalib);
|
|
}
|
|
|
|
private void CreateModuleDetailForm(int sID)
|
|
{
|
|
foreach (Form frm in Application.OpenForms)
|
|
{
|
|
if (frm.Name == "fmxModuleDetail")
|
|
{
|
|
((fmxModuleDetail)frm).SetModuleID(sID);
|
|
frm.Activate();
|
|
return;
|
|
}
|
|
}
|
|
ModuleDetailForm = new fmxModuleDetail(sID, ref Config, ref SystemData);
|
|
|
|
//ModuleDetailForm.OnAutoTxCanSet += SetAutoTxCan;
|
|
//ModuleDetailForm.OnSendDataCan += SendDataToCan;
|
|
ModuleDetailForm.Show();
|
|
}
|
|
|
|
private void chbPolling_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (edModuleID.Text != "")
|
|
{
|
|
ModuleID = Convert.ToInt32(edModuleID.Text);
|
|
|
|
if (uartThread != null)
|
|
{
|
|
uartThread.SetPolling(chbPolling.Checked, ModuleID, ref SystemData[ModuleID - 1]);
|
|
ShelfStatus?.UpdateSystemId(ModuleID);
|
|
}
|
|
if (rs232Thread124050 != null)
|
|
{
|
|
rs232Thread124050.SetPolling(chbPolling.Checked, ModuleID, ref SystemData[ModuleID - 1]);
|
|
ShelfStatus?.UpdateSystemId(ModuleID);
|
|
}
|
|
if (rs485Thread != null)
|
|
{
|
|
rs485Thread.SetPolling(chbPolling.Checked, ModuleID, ref SystemData);
|
|
ShelfStatus?.UpdateSystemId(ModuleID);
|
|
}
|
|
if (rs485Thread124050 != null)
|
|
{
|
|
rs485Thread124050.SetPolling(chbPolling.Checked, ModuleID, ref SystemData);
|
|
ShelfStatus?.UpdateSystemId(ModuleID);
|
|
}
|
|
snmpThread?.SetAutoTx(chbPolling.Checked);
|
|
snmpThread124050?.SetAutoTx(chbPolling.Checked);
|
|
|
|
uDataLog.UpdateActiveStatus(Active, ModuleID, Config, SystemData);
|
|
dbThread?.UpdateData(ModuleID, SystemData);
|
|
|
|
edModuleID.Enabled = !chbPolling.Checked;
|
|
}
|
|
}
|
|
|
|
private void SnmpRecvData(string result, bool error)
|
|
{
|
|
if (result != "")
|
|
{
|
|
uEventLog.EventUpdate(result + "\r\n");
|
|
}
|
|
}
|
|
|
|
private void SetAutoTx(bool autoTx)
|
|
{
|
|
uartThread?.SetAutoTx(autoTx);
|
|
rs232Thread124050?.SetAutoTx(autoTx);
|
|
}
|
|
#endregion
|
|
|
|
#region KEYBOARD HOOK
|
|
private void edSystemId_KeyPress(object sender, KeyPressEventArgs e)
|
|
{
|
|
csUtils.TypingOnlyNumber(sender, e, false, false);
|
|
}
|
|
#endregion
|
|
|
|
#region MENU COMMAND
|
|
private void inventoryControlToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
foreach (Form frm in Application.OpenForms)
|
|
{
|
|
if (frm.Name == "fmxInventoryConfig")
|
|
{
|
|
frm.Activate();
|
|
return;
|
|
}
|
|
}
|
|
InventoryConfig = new fmxInventoryConfig(0, ref Config, ref SystemData[0]);
|
|
|
|
InventoryConfig.OnUpdate += UpdateInformation;
|
|
InventoryConfig.OnCommand += InvDataSetCmd;
|
|
//InventoryConfig.OnCommandBySnmp += SetInvEventBySnmp;
|
|
InventoryConfig.Show();
|
|
}
|
|
|
|
private void InvDataSetCmd(int sId, int mode, int index, int flag, ref DeviceInforation aInvData)
|
|
{
|
|
SystemData[0].CalibrationData.InvData = aInvData;
|
|
//OnCommand?.Invoke(sId, mode, index, flag, ref SystemData[0].ParamData, ref SystemData[0].CalibrationData);
|
|
//SetCmdToCan(sId, mode, index, flag, ref SystemData[0].ParamData, ref SystemData[0].CalibrationData);
|
|
}
|
|
|
|
private void UpdateInformation(object sendor)
|
|
{
|
|
((fmxInventoryConfig)sendor).UpdateData(ref SystemData[0]);
|
|
}
|
|
|
|
private void checkDBToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
foreach (Form frm in Application.OpenForms)
|
|
{
|
|
if (frm.Name == "fmxExcelFile")
|
|
{
|
|
frm.Activate();
|
|
return;
|
|
}
|
|
}
|
|
fmxExcelFile DbControl = new fmxExcelFile(Config);
|
|
|
|
DbControl.Show();
|
|
}
|
|
|
|
private void levelConfigToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
}
|
|
|
|
private void changeLeToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
foreach (Form frm in Application.OpenForms)
|
|
{
|
|
if (frm.Name == "FmxLevelConfig")
|
|
{
|
|
frm.Activate();
|
|
return;
|
|
}
|
|
}
|
|
FmxLevelConfig LevelControl = new FmxLevelConfig(Config);
|
|
|
|
LevelControl.ShowDialog();
|
|
}
|
|
|
|
private void changePasswordToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
foreach (Form frm in Application.OpenForms)
|
|
{
|
|
if (frm.Name == "FmxPasswordChange")
|
|
{
|
|
frm.Activate();
|
|
return;
|
|
}
|
|
}
|
|
FmxPasswordChange ChangePassword = new FmxPasswordChange(Config);
|
|
|
|
ChangePassword.ShowDialog();
|
|
}
|
|
#endregion
|
|
|
|
#region TIMER EVENT
|
|
private void tmrDisplay_Tick(object sender, EventArgs e)
|
|
{
|
|
uTarget.UpdateStatus(Active);
|
|
DisplaySystemFwVerModule();
|
|
}
|
|
#endregion
|
|
}
|
|
} |