diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bbbf9fc --- /dev/null +++ b/.gitignore @@ -0,0 +1,30 @@ +## Visual Studio / C# Ignore Files +.vs/ +bin/ +obj/ +*.suo +*.user +*.userosv +*.userprefs +*.pidb +*.booproj +*.svclog +*.cache + +## Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +build/ +bld/ +[Bb]in/ +[Ob]j/ + +## Windows temp files +Thumbs.db +ehthumbs.db +Desktop.ini +$RECYCLE.BIN/ diff --git a/BMS_D1000/BMS_D1000.csproj b/BMS_D1000/BMS_D1000.csproj index 40f0d26..0f14b07 100644 --- a/BMS_D1000/BMS_D1000.csproj +++ b/BMS_D1000/BMS_D1000.csproj @@ -215,9 +215,6 @@ - - - diff --git a/BMS_D1000/Utils/Function/AlarmFile.cs b/BMS_D1000/Utils/Function/AlarmFile.cs index 0bcf86b..aff7a39 100644 --- a/BMS_D1000/Utils/Function/AlarmFile.cs +++ b/BMS_D1000/Utils/Function/AlarmFile.cs @@ -80,63 +80,47 @@ namespace BMS_D1000H.Utils.Functions private byte[] WriteDataHeader(DeviceDataSystem sData) { - string tt; - string sdata; - DateTime aLog = DateTime.Now; + StringBuilder sb = new StringBuilder(); - tt = aLog.ToString("yyyy-MM-dd HH:mm:ss"); - sdata = String.Format( - "{0},{1},{2},{3},{4},{5},{6},{7}," - , "DATETIME" // 0 - , "OPERATING" // 1 - , "ALARM" // 2 - , "SYSTEM VOLTAGE" // 3 - , "SYSTEM CURRENT" // 4 - , "SYSTEM SOC" // 5 - , "TRIP" // 6 - , "WARNING" // 7 - ); + sb.Append("DATETIME,OPERATING,ALARM,SYSTEM VOLTAGE,SYSTEM CURRENT,SYSTEM SOC,TRIP,WARNING,"); for (int i = 0; i < sData.ModuleQuantity; i++) { - sdata += String.Format("VOLTAGE_{0:00},", i + 1); + sb.AppendFormat("VOLTAGE_{0:00},", i + 1); } for (int i = 0; i < sData.ModuleQuantity; i++) { - sdata += String.Format("CURRENT_{0:00},", i + 1); + sb.AppendFormat("CURRENT_{0:00},", i + 1); } for (int i = 0; i < sData.ModuleQuantity; i++) { - sdata += String.Format("SOC_{0:00},", i + 1); + sb.AppendFormat("SOC_{0:00},", i + 1); } for (int i = 0; i < sData.ModuleQuantity; i++) { - sdata += String.Format("MAX_TEMP_{0:00},", i + 1); + sb.AppendFormat("MAX_TEMP_{0:00},", i + 1); } for (int i = 0; i < sData.ModuleQuantity; i++) { - sdata += String.Format("MIN_TEMP_{0:00},", i + 1); + sb.AppendFormat("MIN_TEMP_{0:00},", i + 1); } for (int i = 0; i < sData.ModuleQuantity; i++) { - sdata += String.Format("MAX_CVOLT_{0:00},", i + 1); + sb.AppendFormat("MAX_CVOLT_{0:00},", i + 1); } for (int i = 0; i < sData.ModuleQuantity; i++) { - sdata += String.Format("MIN_CVOLT_{0:00},", i + 1); + sb.AppendFormat("MIN_CVOLT_{0:00},", i + 1); } - sdata += "\r\n"; + sb.Append("\r\n"); - Byte[] info = - new UTF8Encoding(true).GetBytes(sdata); - - return info; + return new UTF8Encoding(true).GetBytes(sb.ToString()); } #endregion @@ -145,249 +129,185 @@ namespace BMS_D1000H.Utils.Functions private byte[] WriteData(DeviceDataSystem sData, DeviceDataTray[] tData) { - string tt; - string sdata; + StringBuilder sb = new StringBuilder(); DateTime aLog = DateTime.Now; - tt = aLog.ToString("yyyy-MM-dd HH:mm:ss"); - sdata = String.Format( - "{0},{1},{2},{3},{4},{5}," - , tt // {0} DATETIME - , String.Format("{0}", StatusStr.operating[sData.OpStatus]) // {1} OPERATING - , String.Format("{0}", StatusStr.alarm[sData.AlarmStatus]) // {2} ALARM - , String.Format("{0:#0.0}", Convert.ToDouble(sData.BatVoltage) / 100) // {3} SYSTEM VOLTAGE - , String.Format("{0:#0.0}", Convert.ToDouble(sData.Current) / 10) // {4} SYSTEM CURRENT - , String.Format("{0:#0.0}", Convert.ToDouble(sData.RelativeStateOfCharge) / 10) // {5} SYSTEM SOC + sb.AppendFormat("{0:yyyy-MM-dd HH:mm:ss},{1},{2},{3:#0.0},{4:#0.0},{5:#0.0}," + , aLog + , StatusStr.operating[sData.OpStatus] + , StatusStr.alarm[sData.AlarmStatus] + , Convert.ToDouble(sData.BatVoltage) / 100 + , Convert.ToDouble(sData.Current) / 10 + , Convert.ToDouble(sData.RelativeStateOfCharge) / 10 ); - sdata += String.Format("0x{0:X4},", sData.Protection); // Protection - sdata += String.Format("0x{0:X4},", sData.Warning); // Warning + sb.AppendFormat("0x{0:X4},", sData.Protection); + sb.AppendFormat("0x{0:X4},", sData.Warning); for (int i = 0; i < sData.ModuleQuantity; i++) { - sdata += String.Format("{0:#0.0},", Convert.ToDouble(tData[i].BatVoltage) / 100); // Module Voltage + sb.AppendFormat("{0:#0.0},", Convert.ToDouble(tData[i].BatVoltage) / 100); } for (int i = 0; i < sData.ModuleQuantity; i++) { - sdata += String.Format("{0:#0.0},", Convert.ToDouble(tData[i].Current) / 10); // Module Current + sb.AppendFormat("{0:#0.0},", Convert.ToDouble(tData[i].Current) / 10); } for (int i = 0; i < sData.ModuleQuantity; i++) { - sdata += String.Format("{0:#0},", Convert.ToDouble(tData[i].RelativeStateOfCharge) / 10); // Module SOC + sb.AppendFormat("{0:#0},", Convert.ToDouble(tData[i].RelativeStateOfCharge) / 10); } for (int i = 0; i < sData.ModuleQuantity; i++) { - sdata += String.Format("{0:#0.0},", Convert.ToDouble(tData[i].MaxTemp) / 10); // Module Max Temp + sb.AppendFormat("{0:#0.0},", Convert.ToDouble(tData[i].MaxTemp) / 10); } for (int i = 0; i < sData.ModuleQuantity; i++) { - sdata += String.Format("{0:#0.0},", Convert.ToDouble(tData[i].MinTemp) / 10); // Module Min Temp + sb.AppendFormat("{0:#0.0},", Convert.ToDouble(tData[i].MinTemp) / 10); } for (int i = 0; i < sData.ModuleQuantity; i++) { - sdata += String.Format("{0:#0.000},", Convert.ToDouble(tData[i].MaxCellVoltage) / 1000); // Cell Max Volage + sb.AppendFormat("{0:#0.000},", Convert.ToDouble(tData[i].MaxCellVoltage) / 1000); } for (int i = 0; i < sData.ModuleQuantity; i++) { - sdata += String.Format("{0:#0.000},", Convert.ToDouble(tData[i].MinCellVoltage) / 1000); // Cell Max Volage + sb.AppendFormat("{0:#0.000},", Convert.ToDouble(tData[i].MinCellVoltage) / 1000); } - sdata += "\r\n"; + sb.Append("\r\n"); - Byte[] info = - new UTF8Encoding(true).GetBytes(sdata); - - return info; + return new UTF8Encoding(true).GetBytes(sb.ToString()); } #endregion public void LoggingData(DeviceDataSystem sData, DeviceDataTray[] tData) { - string filename; - string path; DateTime aLog = DateTime.Now; - FileStream fStream = null; - byte[] logData; + string filename = String.Format("{0}log{1}.csv", LoggingFilePath, aLog.ToString("yyyyMMdd")); + string path = System.IO.Path.GetDirectoryName(filename); - filename = String.Format("{0}log{1}.csv", LoggingFilePath, aLog.ToString("yyyyMMdd")); + try + { + if (Directory.Exists(path) == false) + Directory.CreateDirectory(path); - path = System.IO.Path.GetDirectoryName(filename); + bool fileExists = File.Exists(filename); + FileMode mode = fileExists ? FileMode.Open : FileMode.CreateNew; - //if (Directory.Exists(SdCardPath) == true) - //{ - try + using (FileStream fStream = new FileStream(filename, mode, FileAccess.ReadWrite)) { - if (Directory.Exists(path) == false) - Directory.CreateDirectory(path); - - if (File.Exists(filename)) + fStream.Seek(0, SeekOrigin.End); + if (!fileExists) { - fStream = new FileStream(filename, FileMode.Open, FileAccess.ReadWrite); - if (fStream != null) - { - fStream.Seek(0, SeekOrigin.End); - logData = WriteData(sData, tData); - //logData = WriteData(sData, tDataA, tDataB); - - fStream.Write(logData, 0, logData.Length); - fStream.Close(); - } - } - else - { - fStream = new FileStream(filename, FileMode.CreateNew, FileAccess.ReadWrite); - - if (fStream != null) - { - fStream.Seek(0, SeekOrigin.End); - logData = WriteDataHeader(sData); - //logData = WriteDataHeader(sData, tDataA, tDataB); - fStream.Write(logData, 0, logData.Length); - logData = WriteData(sData, tData); - //logData = WriteData(sData, tDataA, tDataB); - fStream.Write(logData, 0, logData.Length); - fStream.Close(); - } + byte[] logHeader = WriteDataHeader(sData); + fStream.Write(logHeader, 0, logHeader.Length); } + byte[] logData = WriteData(sData, tData); + fStream.Write(logData, 0, logData.Length); } - catch (Exception) - { - } - //} + } + catch (Exception) + { + } } public void InitPasswordData() { string filepath = PasswordFilePath; - FileStream fStream = null; - byte[] bData; - - fStream = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.ReadWrite); - - if (fStream != null) + using (FileStream fStream = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.ReadWrite)) { BMS_PASSWORD = "0000"; - bData = Encoding.ASCII.GetBytes(BMS_PASSWORD); + byte[] bData = Encoding.ASCII.GetBytes(BMS_PASSWORD); fStream.Seek(0, SeekOrigin.Begin); fStream.Write(bData, 0, bData.Length); - fStream.Close(); } } public void SaveNewPasswordData(string new_password) { string filepath = PasswordFilePath; - FileStream fStream = null; - byte[] bData; - - fStream = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.ReadWrite); - - if (fStream != null) + using (FileStream fStream = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.ReadWrite)) { BMS_PASSWORD = new_password; - bData = Encoding.ASCII.GetBytes(BMS_PASSWORD); + byte[] bData = Encoding.ASCII.GetBytes(BMS_PASSWORD); fStream.Seek(0, SeekOrigin.Begin); fStream.Write(bData, 0, bData.Length); - fStream.Close(); } } private void LoadPasswordData() { - long fsize = 0; string filepath = PasswordFilePath; - FileStream fStream = null; - byte[] bData; if (File.Exists(filepath)) { - fStream = new FileStream(filepath, FileMode.Open, FileAccess.Read); - - if (fStream != null) + using (FileStream fStream = new FileStream(filepath, FileMode.Open, FileAccess.Read)) { - fsize = fStream.Length; - bData = new byte[fsize]; + long fsize = fStream.Length; + byte[] bData = new byte[fsize]; fStream.Seek(0, SeekOrigin.Begin); fStream.Read(bData, 0, Convert.ToInt32(fsize)); - fStream.Close(); BMS_PASSWORD = Encoding.ASCII.GetString(bData, 0, Convert.ToInt32(fsize)); } } else { - fStream = new FileStream(filepath, FileMode.CreateNew, FileAccess.ReadWrite); - - if (fStream != null) + using (FileStream fStream = new FileStream(filepath, FileMode.CreateNew, FileAccess.ReadWrite)) { BMS_PASSWORD = "0000"; - bData = Encoding.ASCII.GetBytes(BMS_PASSWORD); + byte[] bData = Encoding.ASCII.GetBytes(BMS_PASSWORD); fStream.Seek(0, SeekOrigin.Begin); fStream.Write(bData, 0, bData.Length); - fStream.Close(); } } } private void LoadAlarmData() { - long fsize = 0; string filepath = AlarmHistPath; - FileStream fStream = null; byte[] bData = new byte[Marshal.SizeOf(AlarmList)]; if (File.Exists(AlarmHistPath)) { - fStream = new FileStream(filepath, FileMode.Open, FileAccess.ReadWrite); - - if (fStream != null) + using (FileStream fStream = new FileStream(filepath, FileMode.Open, FileAccess.ReadWrite)) { - fsize = fStream.Length; + long fsize = fStream.Length; if (Marshal.SizeOf(AlarmList) != fsize) { fStream.Close(); - fStream = null; - File.Delete(filepath); - fStream = new FileStream(filepath, FileMode.CreateNew, FileAccess.ReadWrite); - - if (fStream != null) + using (FileStream newStream = new FileStream(filepath, FileMode.CreateNew, FileAccess.ReadWrite)) { - fStream.SetLength(Marshal.SizeOf(AlarmList)); - fStream.Seek(0, SeekOrigin.Begin); - fStream.Write(bData, 0, Marshal.SizeOf(AlarmList)); + newStream.SetLength(Marshal.SizeOf(AlarmList)); + newStream.Seek(0, SeekOrigin.Begin); + newStream.Write(bData, 0, Marshal.SizeOf(AlarmList)); - fStream.Seek(0, SeekOrigin.Begin); - fStream.Read(bData, 0, Marshal.SizeOf(AlarmList)); + newStream.Seek(0, SeekOrigin.Begin); + newStream.Read(bData, 0, Marshal.SizeOf(AlarmList)); AlarmList = ConvertTo.ByteToStruct(bData); - fStream.Close(); } } else { fStream.Read(bData, 0, Marshal.SizeOf(AlarmList)); - fStream.Close(); - AlarmList = ConvertTo.ByteToStruct(bData); } } } else { - fStream = new FileStream(filepath, FileMode.CreateNew, FileAccess.ReadWrite); - - if (fStream != null) + using (FileStream fStream = new FileStream(filepath, FileMode.CreateNew, FileAccess.ReadWrite)) { fStream.SetLength(Marshal.SizeOf(AlarmList)); fStream.Seek(0, SeekOrigin.Begin); @@ -396,7 +316,6 @@ namespace BMS_D1000H.Utils.Functions fStream.Seek(0, SeekOrigin.Begin); fStream.Read(bData, 0, Marshal.SizeOf(AlarmList)); AlarmList = ConvertTo.ByteToStruct(bData); - fStream.Close(); } } Make_Run_History(EventID.EVENT_INFO, AlarmID.POWER_ON_RESET, 0, 0, 0); @@ -406,18 +325,12 @@ namespace BMS_D1000H.Utils.Functions { long fsize = Marshal.SizeOf(AlarmList); string filepath = AlarmHistPath; - FileStream fStream = null; - byte[] bData = new byte[fsize]; + byte[] bData = ConvertTo.StructureToByte(AlarmList); - bData = ConvertTo.StructureToByte(AlarmList); - - fStream = new FileStream(filepath, FileMode.Open, FileAccess.ReadWrite); - - if (fStream != null) + using (FileStream fStream = new FileStream(filepath, FileMode.Open, FileAccess.ReadWrite)) { fStream.Seek(0, SeekOrigin.Begin); fStream.Write(bData, 0, Convert.ToInt32(fsize)); - fStream.Close(); } } @@ -425,18 +338,14 @@ namespace BMS_D1000H.Utils.Functions { long fsize = Marshal.SizeOf(AlarmList); string filepath = AlarmHistPath; - FileStream fStream = null; byte[] bData = new byte[fsize]; System.Array.Clear(bData, 0, Convert.ToInt32(fsize)); - fStream = new FileStream(filepath, FileMode.Open, FileAccess.ReadWrite); - - if (fStream != null) + using (FileStream fStream = new FileStream(filepath, FileMode.Open, FileAccess.ReadWrite)) { fStream.Seek(0, SeekOrigin.Begin); fStream.Write(bData, 0, Convert.ToInt32(fsize)); - fStream.Close(); AlarmList = ConvertTo.ByteToStruct(bData); } @@ -447,25 +356,20 @@ namespace BMS_D1000H.Utils.Functions public long GetFileSize(string FilePath) { long fsize = 0; - FileStream fStream = null; if (File.Exists(FilePath)) { - // Found - fStream = new FileStream(FilePath, FileMode.Open, FileAccess.ReadWrite); - - fsize = fStream.Length; - - fStream.Close(); + using (FileStream fStream = new FileStream(FilePath, FileMode.Open, FileAccess.ReadWrite)) + { + fsize = fStream.Length; + } } else { - // No File - fStream = new FileStream(FilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite); - - fsize = fStream.Length; - - fStream.Close(); + using (FileStream fStream = new FileStream(FilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite)) + { + fsize = fStream.Length; + } } return fsize; @@ -560,29 +464,18 @@ namespace BMS_D1000H.Utils.Functions public byte[] MakeHistoryCsvHeader() { - string str = ""; - byte[] result; - - str += String.Format("DateTime,"); - str += String.Format("Event,"); - str += String.Format("Alarm Name,"); - str += String.Format("Position,"); - str += String.Format("Parameter,"); - str += "\r\n"; - - result = new UTF8Encoding(true).GetBytes(str); - - return result; + StringBuilder sb = new StringBuilder(); + sb.Append("DateTime,Event,Alarm Name,Position,Parameter,\r\n"); + return new UTF8Encoding(true).GetBytes(sb.ToString()); } public void Save_HistoryCsv(TAlarm hdata) { - string wStr = ""; + StringBuilder sb = new StringBuilder(); - wStr = String.Format("{0:yyyy-MM-dd HH:mm:ss},", hdata.aTime); // DateTime - nHist.aTime.ToString("yyyy-MM-dd HH:mm:ss"); - wStr += String.Format("{0},", EventID.event_name[hdata.aFlag]); // Event type - EventID.event_name[nHist.aFlag]; - wStr += String.Format("{0},", AlarmID.name[hdata.aNameNo]); // Alarm name - hAlarmName[hNo].Text = AlarmID.name[nHist.aNameNo]; - //wStr += String.Format("{0}-{1},", PosID.pos[hdata.aPos], hdata.ctno); // Alarm position + sb.AppendFormat("{0:yyyy-MM-dd HH:mm:ss},", hdata.aTime); + sb.AppendFormat("{0},", EventID.event_name[hdata.aFlag]); + sb.AppendFormat("{0},", AlarmID.name[hdata.aNameNo]); switch (hdata.aNameNo) { @@ -590,38 +483,38 @@ namespace BMS_D1000H.Utils.Functions case AlarmID.COV_WARNING: case AlarmID.CUV_PROTECTION: case AlarmID.CUV_WARNING: - wStr += String.Format("'{0}-{1},", PosID.pos[hdata.aPos], hdata.ctno); - wStr += String.Format("{0:#0.000},", Convert.ToDouble(hdata.aParam) / 1000); + sb.AppendFormat("'{0}-{1},", PosID.pos[hdata.aPos], hdata.ctno); + sb.AppendFormat("{0:#0.000},", Convert.ToDouble(hdata.aParam) / 1000); break; case AlarmID.OTC_PROTECTION: case AlarmID.OTC_WARNING: case AlarmID.OTD_PROTECTION: case AlarmID.OTD_WARNING: - wStr += String.Format("'{0}-{1},", PosID.pos[hdata.aPos], hdata.ctno); - wStr += String.Format("{0:#0.0},", Convert.ToDouble(hdata.aParam) / 10); + sb.AppendFormat("'{0}-{1},", PosID.pos[hdata.aPos], hdata.ctno); + sb.AppendFormat("{0:#0.0},", Convert.ToDouble(hdata.aParam) / 10); break; case AlarmID.SOV_PROTECTION: case AlarmID.SOV_WARNING: case AlarmID.SUV_PROTECTION: case AlarmID.SUV_WARNING: - wStr += String.Format("'{0},", PosID.pos[hdata.aPos]); - wStr += String.Format("{0:#0.0},", Convert.ToDouble(hdata.aParam) / 100); + sb.AppendFormat("'{0},", PosID.pos[hdata.aPos]); + sb.AppendFormat("{0:#0.0},", Convert.ToDouble(hdata.aParam) / 100); break; case AlarmID.OCC_PROTECTION: case AlarmID.OCC_WARNING: case AlarmID.OCD_PROTECTION: case AlarmID.OCD_WARNING: - wStr += String.Format("'{0},", PosID.pos[hdata.aPos]); - wStr += String.Format("{0:#0.0},", Convert.ToDouble(hdata.aParam) / 10); + sb.AppendFormat("'{0},", PosID.pos[hdata.aPos]); + sb.AppendFormat("{0:#0.0},", Convert.ToDouble(hdata.aParam) / 10); break; default: - wStr += String.Format("'{0},", PosID.pos[hdata.aPos]); - wStr += String.Format(","); + sb.AppendFormat("'{0},", PosID.pos[hdata.aPos]); + sb.Append(","); break; } - wStr += "\r\n"; + sb.Append("\r\n"); - byte[] bAlm = new UTF8Encoding(true).GetBytes(wStr); + byte[] bAlm = new UTF8Encoding(true).GetBytes(sb.ToString()); string filename = String.Format("{0}Alm_{1}.csv", AlarmHistCsvPath, DateTime.Now.ToString("yyyyMMdd")); string path = System.IO.Path.GetDirectoryName(filename); @@ -631,30 +524,18 @@ namespace BMS_D1000H.Utils.Functions if (Directory.Exists(path) == false) Directory.CreateDirectory(path); - if (File.Exists(filename)) - { - FileStream fStream = new FileStream(filename, FileMode.Open, FileAccess.ReadWrite); - if (fStream != null) - { - fStream.Seek(0, SeekOrigin.End); - fStream.Write(bAlm, 0, bAlm.Length); - fStream.Close(); - } - } - else - { - FileStream fStream = new FileStream(filename, FileMode.CreateNew, FileAccess.ReadWrite); + bool fileExists = File.Exists(filename); + FileMode mode = fileExists ? FileMode.Open : FileMode.CreateNew; - if (fStream != null) + using (FileStream fStream = new FileStream(filename, mode, FileAccess.ReadWrite)) + { + fStream.Seek(0, SeekOrigin.End); + if (!fileExists) { - fStream.Seek(0, SeekOrigin.End); - byte[] hdr = MakeHistoryCsvHeader(); fStream.Write(hdr, 0, hdr.Length); - fStream.Write(bAlm, 0, bAlm.Length); - - fStream.Close(); } + fStream.Write(bAlm, 0, bAlm.Length); } } catch (Exception) diff --git a/BMS_D1000/bin/Release/BMS_D1000H.exe b/BMS_D1000/bin/Release/BMS_D1000H.exe index b96d4b8..982f76a 100644 Binary files a/BMS_D1000/bin/Release/BMS_D1000H.exe and b/BMS_D1000/bin/Release/BMS_D1000H.exe differ diff --git a/BMS_D1000/bin/Release/BMS_D1000H.pdb b/BMS_D1000/bin/Release/BMS_D1000H.pdb index d3ddd33..48f8995 100644 Binary files a/BMS_D1000/bin/Release/BMS_D1000H.pdb and b/BMS_D1000/bin/Release/BMS_D1000H.pdb differ diff --git a/BMS_D1000/obj/Release/BMS_D1000.csproj.FileListAbsolute.txt b/BMS_D1000/obj/Release/BMS_D1000.csproj.FileListAbsolute.txt index 0dccdd0..7ba86cd 100644 --- a/BMS_D1000/obj/Release/BMS_D1000.csproj.FileListAbsolute.txt +++ b/BMS_D1000/obj/Release/BMS_D1000.csproj.FileListAbsolute.txt @@ -272,3 +272,26 @@ C:\Users\JK.Woo\Desktop\Project\KT\BMS_D1000_V1009_AG\BMS_D1000\bin\Release\Smar C:\Users\JK.Woo\Desktop\Project\KT\BMS_D1000_V1009_AG\BMS_D1000\bin\Release\SmartXCommonExt.dll C:\Users\JK.Woo\Desktop\Project\KT\BMS_D1000_V1009_AG\BMS_D1000\bin\Release\System.Data.SqlServerCe.dll C:\Users\JK.Woo\Desktop\Project\KT\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\BMS_D1000H.exe +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\bin\Release\BMS_D1000H.exe +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\bin\Release\BMS_D1000H.pdb +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\bin\Release\SmartX_IEC1000.dll +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\bin\Release\SmartXCommon.dll +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\bin\Release\SmartXCommonExt.dll +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\bin\Release\System.Data.SqlServerCe.dll +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\ResolveAssemblyReference.cache +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\BMS_D1000H.fmSystemSet.resources +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\BMS_D1000H.fmBMSMain.resources +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\BMS_D1000H.fmHistory.resources +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\BMS_D1000H.fmNetConfig.resources +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\BMS_D1000H.fmNetConfigCmd.resources +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\BMS_D1000H.fmParamSet.resources +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\BMS_D1000H.fmParamSetCmd.resources +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\BMS_D1000H.fmPassword.resources +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\BMS_D1000H.fmScreenSaver.resources +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\BMS_D1000H.fmSetMenu.resources +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\BMS_D1000H.fmSystemSetCmd.resources +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\BMS_D1000H.fmTrayInfo.resources +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\BMS_D1000H.Properties.Resources.resources +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\BMS_D1000.csproj.GenerateResource.Cache +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\BMS_D1000H.exe +F:\Project\KT\LCD\BMS_D1000_V1009_AG\BMS_D1000\obj\Release\BMS_D1000H.pdb diff --git a/BMS_D1000/obj/Release/BMS_D1000H.exe b/BMS_D1000/obj/Release/BMS_D1000H.exe index b96d4b8..982f76a 100644 Binary files a/BMS_D1000/obj/Release/BMS_D1000H.exe and b/BMS_D1000/obj/Release/BMS_D1000H.exe differ diff --git a/BMS_D1000/obj/Release/BMS_D1000H.pdb b/BMS_D1000/obj/Release/BMS_D1000H.pdb index d3ddd33..48f8995 100644 Binary files a/BMS_D1000/obj/Release/BMS_D1000H.pdb and b/BMS_D1000/obj/Release/BMS_D1000H.pdb differ diff --git a/doc/BMS_D1000_Improvement_Analysis.md b/doc/BMS_D1000_Improvement_Analysis.md index c055b0e..af091df 100644 --- a/doc/BMS_D1000_Improvement_Analysis.md +++ b/doc/BMS_D1000_Improvement_Analysis.md @@ -41,36 +41,36 @@ --- -### 🧹 2.3 λ―Έμ‚¬μš©(Dead) 파일 및 ν”„λ‘œμ νŠΈ 정리 (Low Priority) +### 🧹 2.3 λ―Έμ‚¬μš©(Dead) 파일 및 ν”„λ‘œμ νŠΈ 정리 (Low Priority) **(μ™„λ£Œ)** -1. **λ―Έμ‚¬μš© 더미 Form 파일 방치** - - **μœ„μΉ˜**: [`Form1.cs`](file:///c:/Users/JK.Woo/Desktop/Project/KT/BMS_D1000_V1009_AG/BMS_D1000/Form1.cs), `Form2.cs`, `Form3.cs`, `Form4.cs` (ν”„λ‘œμ νŠΈ 루트 디렉터리) +1. **λ―Έμ‚¬μš© 더미 Form 파일 방치** **(μ™„λ£Œ)** + - **μœ„μΉ˜**: `Form1.cs`, `Form2.cs`, `Form3.cs`, `Form4.cs` (ν”„λ‘œμ νŠΈ 루트 디렉터리) - **문제점**: `BMS_D1000.csproj`에 ν¬ν•¨λ˜μ§€ μ•Šμ€ 빈 WinForm μ†ŒμŠ€ νŒŒμΌλ“€μ΄ 루트 디렉터리에 λ‚¨μ•„μžˆμ–΄ 개발 μ‹œ ν˜Όλž€μ„ μœ λ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€. - - **κ°œμ„ μ•ˆ**: λΆˆν•„μš”ν•œ `Form1`~`Form4` 및 `.resx`, `.Designer.cs` 파일 μ‚­μ œ. + - **κ°œμ„ μ•ˆ**: λΆˆν•„μš”ν•œ `Form1`~`Form4` 및 `.resx`, `.Designer.cs` 파일 μ‚­μ œ. (쑰치 μ™„λ£Œ: μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ 확인) -2. **Service λ””λ ‰ν„°λ¦¬μ˜ `Class1.cs` λΉŒλ“œ 미포함** - - **μœ„μΉ˜**: [`Service/Class1.cs`](file:///c:/Users/JK.Woo/Desktop/Project/KT/BMS_D1000_V1009_AG/BMS_D1000/Service/Class1.cs) - - **문제점**: csprojμ—λŠ” `` ν΄λ”λ§Œ λ“±λ‘λ˜μ–΄ 있고 `Class1.cs` μ†ŒμŠ€ 파일이 Compile ν•­λͺ©μ—μ„œ λˆ„λ½λ˜μ–΄ 있음. - - **κ°œμ„ μ•ˆ**: ν•΄λ‹Ή μ†ŒμŠ€κ°€ ν•„μš”ν•œ κΈ°λŠ₯인지 확인 ν›„ `csproj`에 ν¬ν•¨ν•˜κ±°λ‚˜ μ‚­μ œ. +2. **Service λ””λ ‰ν„°λ¦¬μ˜ `Class1.cs` λΉŒλ“œ 미포함 및 λ―Έμ‚¬μš© μ°Έμ‘°** **(μ™„λ£Œ)** + - **μœ„μΉ˜**: `Service/` + - **문제점**: csprojμ—λŠ” `` ν΄λ”λ§Œ λ“±λ‘λ˜μ–΄ 있고 μ†ŒμŠ€ 파일이 μ‘΄μž¬ν•˜μ§€ μ•Šκ±°λ‚˜ λˆ„λ½λ¨. + - **κ°œμ„ μ•ˆ**: ν•΄λ‹Ή μ†ŒμŠ€κ°€ ν•„μš”ν•œ κΈ°λŠ₯인지 확인 ν›„ `csproj`μ—μ„œ λΆˆν•„μš”ν•œ `` ꡬ문 제거 및 폴더 정리 μ™„λ£Œ. -3. **`Old/` 디렉터리 λ°±μ—… 관리** - - **μœ„μΉ˜**: `BMS_D1000/Old/` - - **문제점**: μ†ŒμŠ€ μ œμ–΄ μ‹œμŠ€ν…œ(Git λ“±)을 μ‚¬μš© 쀑이라면 ν˜•μƒ 관리에 λ‚¨μ•„μžˆμ„ 이전 버전 λ°±μ—… 디렉터리가 둜컬 μ›Œν¬μŠ€νŽ˜μ΄μŠ€μ— 방치됨. - - **κ°œμ„ μ•ˆ**: ν•„μš”μ— 따라 둜컬 정리 및 `.gitignore` μ„€μ • 점검. +3. **`Old/` 디렉터리 λ°±μ—… 및 Git `.gitignore` 점검** **(μ™„λ£Œ)** + - **μœ„μΉ˜**: μ›Œν¬μŠ€νŽ˜μ΄μŠ€ 루트 + - **문제점**: λΉŒλ“œ μ‚°μΆœλ¬Ό 및 μž„μ‹œ 파일이 μ†ŒμŠ€ μ œμ–΄μ— λ“±λ‘λ˜λŠ” 문제 λ°©μ§€. + - **κ°œμ„ μ•ˆ**: ν”„λ‘œμ νŠΈ λ£¨νŠΈμ— Visual Studio / C# 용 `.gitignore` 파일 생성 μ™„λ£Œ. --- -### ⚑ 2.4 λ©”λͺ¨λ¦¬ & μ„±λŠ₯ μ΅œμ ν™” (Optimization) +### ⚑ 2.4 λ©”λͺ¨λ¦¬ & μ„±λŠ₯ μ΅œμ ν™” (Optimization) **(μ™„λ£Œ)** -1. **λ¬Έμžμ—΄ μ—°μ‚° μ‹œ Garbage Collector (GC) λΆ€ν•˜ 유발** - - **μœ„μΉ˜**: [`AlarmFile.cs`](file:///c:/Users/JK.Woo/Desktop/Project/KT/BMS_D1000_V1009_AG/BMS_D1000/Utils/Function/AlarmFile.cs#L100-L134) +1. **λ¬Έμžμ—΄ μ—°μ‚° μ‹œ Garbage Collector (GC) λΆ€ν•˜ 유발** **(μ™„λ£Œ)** + - **μœ„μΉ˜**: [`AlarmFile.cs`](file:///z:/KT/LCD/BMS_D1000_V1009_AG/BMS_D1000/Utils/Function/AlarmFile.cs) - **문제점**: `WriteDataHeader` λ“± 둜그 μž‘μ„± 루프 λ‚΄μ—μ„œ `+` μ—°μ‚°μžλ‘œ λ¬Έμžμ—΄ μ—°κ²°(String Concatenation)을 λ‹€μˆ˜ μˆ˜ν–‰ν•˜μ—¬ GC νž™ λ©”λͺ¨λ¦¬ 할당이 λΉˆλ²ˆν•˜κ²Œ μΌμ–΄λ‚©λ‹ˆλ‹€. Windows CE λ””λ°”μ΄μŠ€λŠ” RAM μžμ›μ΄ 맀우 μ œν•œμ μ΄λ―€λ‘œ GC 파즈(Pause)에 μ·¨μ•½ν•©λ‹ˆλ‹€. - - **κ°œμ„ μ•ˆ**: `StringBuilder` νŒ¨ν„΄μœΌλ‘œ λ³€κ²½ν•˜μ—¬ λ¬Έμžμ—΄ 생성 효율 κ·ΉλŒ€ν™”. + - **κ°œμ„ μ•ˆ**: `StringBuilder` νŒ¨ν„΄μœΌλ‘œ λ³€κ²½ν•˜μ—¬ λ¬Έμžμ—΄ 생성 효율 κ·ΉλŒ€ν™” 및 GC λΆ€ν•˜ μ΅œμ†Œν™” μ™„λ£Œ. -2. **파일 I/O ν•Έλ“€ λˆ„μˆ˜ λ°©μ§€** - - **μœ„μΉ˜**: [`AlarmFile.cs`](file:///c:/Users/JK.Woo/Desktop/Project/KT/BMS_D1000_V1009_AG/BMS_D1000/Utils/Function/AlarmFile.cs) - - **문제점**: `FileStream` 생성 및 λ‹«κΈ°(`Close()`) μ‹œ `try-finally` λ˜λŠ” `using` λ¬Έ ꡬ문을 적극적으둜 μ‚¬μš©ν•˜μ§€ μ•Šμ•„ μ˜ˆμ™Έ λ°œμƒ μ‹œ 파일 잠금(Lock) λ˜λŠ” ν•Έλ“€ λˆ„μˆ˜κ°€ 지속될 수 있음. - - **κ°œμ„ μ•ˆ**: 파일 μ—°μ‚° μ‹œ `using (FileStream fs = ...)` 블둝 적용. +2. **파일 I/O ν•Έλ“€ λˆ„μˆ˜ λ°©μ§€** **(μ™„λ£Œ)** + - **μœ„μΉ˜**: [`AlarmFile.cs`](file:///z:/KT/LCD/BMS_D1000_V1009_AG/BMS_D1000/Utils/Function/AlarmFile.cs) + - **문제점**: `FileStream` 생성 및 λ‹«κΈ°(`Close()`) μ‹œ μ˜ˆμ™Έ λ°œμƒ μ‹œ 파일 잠금(Lock) λ˜λŠ” ν•Έλ“€ λˆ„μˆ˜κ°€ 지속될 수 있음. + - **κ°œμ„ μ•ˆ**: 파일 μ—°μ‚° μ‹œ `using (FileStream fs = ...)` 블둝 ꡬ문을 μΌκ΄€λ˜κ²Œ μ μš©ν•˜μ—¬ μžλ™ μžμ› ν•΄μ œ μ™„λ£Œ. --- @@ -78,8 +78,8 @@ | μš°μ„ μˆœμœ„ | ꡬ뢄 | λŒ€μƒ 파일 / λͺ¨λ“ˆ | ꢌμž₯ 쑰치 λ‚΄μš© | | :--- | :--- | :--- | :--- | -| **P1** | **μ•ˆμ •μ„±** | [csModbusDataProcess.cs](file:///c:/Users/JK.Woo/Desktop/Project/KT/BMS_D1000_V1009_AG/BMS_D1000/Functions/csModbusDataProcess.cs) | λ°°μ—΄ λ²”μœ„ 검사 λ°©μ–΄ 둜직 μΆ”κ°€ **(μ™„λ£Œ)** | -| **P1** | **μ•ˆμ •μ„±** | [Program.cs](file:///c:/Users/JK.Woo/Desktop/Project/KT/BMS_D1000_V1009_AG/BMS_D1000/Program.cs) | μ „μ—­ μ˜ˆμ™Έ 처리기(Unhandled Exception Handler) μΆ”κ°€ **(μ™„λ£Œ)** | -| **P2** | **μžμ› 관리** | [AlarmFile.cs](file:///c:/Users/JK.Woo/Desktop/Project/KT/BMS_D1000_V1009_AG/BMS_D1000/Utils/Function/AlarmFile.cs) | `using` ꡬ문 적용 및 `StringBuilder` μ‚¬μš©, 경둜 동적 좔상화(`PathHelper`) **(μ™„λ£Œ)** | -| **P2** | **μ½”λ“œ 가독성** | [csModbusDataProcess.cs](file:///c:/Users/JK.Woo/Desktop/Project/KT/BMS_D1000_V1009_AG/BMS_D1000/Functions/csModbusDataProcess.cs) | κ±°λŒ€ `switch-case` λͺ¨λ“ˆν™” 및 λ²”μœ„ 기반 λ ˆμ§€μŠ€ν„° λ§€ν•‘ λ¦¬νŒ©ν† λ§ **(μ™„λ£Œ)** | -| **P3** | **μ½”λ“œ 정리** | 루트 Form νŒŒμΌλ“€ (`Form1`~`Form4`), `Service/Class1.cs` | λΆˆν•„μš”ν•œ 더미 μ†ŒμŠ€ 정리 및 csproj 동기화 | +| **P1** | **μ•ˆμ •μ„±** | [csModbusDataProcess.cs](file:///z:/KT/LCD/BMS_D1000_V1009_AG/BMS_D1000/Functions/csModbusDataProcess.cs) | λ°°μ—΄ λ²”μœ„ 검사 λ°©μ–΄ 둜직 μΆ”κ°€ **(μ™„λ£Œ)** | +| **P1** | **μ•ˆμ •μ„±** | [Program.cs](file:///z:/KT/LCD/BMS_D1000_V1009_AG/BMS_D1000/Program.cs) | μ „μ—­ μ˜ˆμ™Έ 처리기(Unhandled Exception Handler) μΆ”κ°€ **(μ™„λ£Œ)** | +| **P2** | **μžμ› 관리** | [AlarmFile.cs](file:///z:/KT/LCD/BMS_D1000_V1009_AG/BMS_D1000/Utils/Function/AlarmFile.cs) | `using` ꡬ문 적용 및 `StringBuilder` μ‚¬μš©, 경둜 동적 좔상화(`PathHelper`) **(μ™„λ£Œ)** | +| **P2** | **μ½”λ“œ 가독성** | [csModbusDataProcess.cs](file:///z:/KT/LCD/BMS_D1000_V1009_AG/BMS_D1000/Functions/csModbusDataProcess.cs) | κ±°λŒ€ `switch-case` λͺ¨λ“ˆν™” 및 λ²”μœ„ 기반 λ ˆμ§€μŠ€ν„° λ§€ν•‘ λ¦¬νŒ©ν† λ§ **(μ™„λ£Œ)** | +| **P3** | **μ½”λ“œ 정리** | 루트 Form νŒŒμΌλ“€ (`Form1`~`Form4`), `Service/` | λΆˆν•„μš”ν•œ 더미 μ†ŒμŠ€ 정리, csproj 동기화 및 `.gitignore` μ„€μ • μΆ”κ°€ **(μ™„λ£Œ)** |