/// <summary> /// 센서별 에러 설정 테이블 만들기 /// </summary> /// <param name="rowIndex"></param> private DataTable initDataTableErrorSet(string com, string id) { xmlBMSDoc doc = new xmlBMSDoc(); DataTable table = doc.ReadErrorSetInfoXMLFile("\\config\\ErrorSetInfo.xml", "ErrorSetInfo", "ERRORSET", com, id); // 존재하지 않을 경우 기본값으로 다시 저장한다. if (table == null) { table = doc.ReadErrorSetInfoXMLFile("\\config\\ErrorSetInfo.xml", "ErrorSetInfo", "ERRORSET", com, id); } return(table); //mErrorSetTable[rowIndex].Columns.Add("Name"); //mErrorSetTable[rowIndex].Columns.Add("Status"); //mErrorSetTable[rowIndex].Columns.Add("Enable"); //mErrorSetTable[rowIndex].Columns.Add("Upper Limit"); //mErrorSetTable[rowIndex].Columns.Add("Low Limit"); //mErrorSetTable[rowIndex].Rows.Add("VOLT", "None", "Enable", "0", "0"); //mErrorSetTable[rowIndex].Rows.Add("CURRENT", "None", "Enable", "0", "0"); //mErrorSetTable[rowIndex].Rows.Add("TEMP1", "None", "Enable", "0", "0"); //mErrorSetTable[rowIndex].Rows.Add("TEMP2", "None", "Enable", "0", "0"); //mErrorSetTable[rowIndex].Rows.Add("TEMP3", "None", "Enable", "0", "0"); //mErrorSetTable[rowIndex].Rows.Add("TEMP4", "None", "Enable", "0", "0"); //mErrorSetTable[rowIndex].Rows.Add("TEMP5", "None", "Enable", "0", "0"); //mErrorSetTable[rowIndex].Rows.Add("TEMP6", "None", "Enable", "0", "0"); }
private void comboBoxLoadBackUpCom_SelectedIndexChanged(object sender, EventArgs e) { ComboBox control = (ComboBox)sender; xmlBMSDoc xml = new xmlBMSDoc(); string lineName = ""; foreach (DataRow row in mLineList.Rows) { if (control.Text.Equals(row["LineName"])) { lineName = row["COM"].ToString(); } } DataTable BMS = xml.ReadBMSInfoXMLFile(lineName); this.comboBoxLoadBackUpBMSID.Items.Clear(); foreach (DataRow row in BMS.Rows) { // add BMS list this.comboBoxLoadBackUpBMSID.Items.Add(row["Name"].ToString()); } this.comboBoxLoadBackUpBMSID.SelectedIndex = 0; }
public ErrorStatusSet(SerialPort comport, string com, string id) { InitializeComponent(); this.comboBoxErrorStatus.Items.Add("None"); this.comboBoxErrorStatus.Items.Add("Upper Limit"); this.comboBoxErrorStatus.Items.Add("Low Limit"); this.comboBoxErrorStatus.Items.Add("Upper or Low Limit"); this.comboBoxErrorStatus.Items.Add("Upper and Low Limit"); this.mCom = com; this.mBMSID = id; this.mComport = comport; this.labelCOM.Text = "COM : " + mCom; this.labelBMSID.Text = "BMS ID : " + mBMSID; xmlBMSDoc doc = new xmlBMSDoc(); DataTable table = doc.ReadErrorSetInfoXMLFile("\\config\\ErrorSetInfo.xml", "ErrorSetInfo", "ERRORSET", this.mCom, this.mBMSID); // 존재하지 않을 경우 기본값으로 다시 저장한다. if (table == null) { table = doc.ReadErrorSetInfoXMLFile("\\config\\ErrorSetInfo.xml", "ErrorSetInfo", "ERRORSET", this.mCom, this.mBMSID); } this.mTable = table.Copy(); this.dataGridViewErrorStatus.DataSource = table; }
private void initControls() { try { xmlBMSDoc lineList = new xmlBMSDoc(); mLineList = new DataTable(); mLineList = lineList.ReadLineInfoXMLFile(); // 다중탭 에러발생시 상태관리 mErrorStatus = new bool[mLineList.Rows.Count]; for (int i = 0; i < mLineList.Rows.Count; i++) { mErrorStatus[i] = false; } foreach (DataRow row in mLineList.Rows) { TabPage tp = new TabPage(row["LineName"].ToString()); tabPageControl tpc = new tabPageControl(this, row["COM"].ToString(), row["LineName"].ToString(), row["BaudRate"].ToString(), row["Interval"].ToString()); tpc.Dock = DockStyle.Fill; mTabPageControl.Add(row["COM"].ToString(), tpc); mTabPageControl[row["COM"].ToString()].ErrorTabPageDraw += MainForm_ErrorTabPageDraw; mTabPage.Add(row["COM"].ToString(), tp); mTabPage[row["COM"].ToString()].Controls.Add(mTabPageControl[row["COM"].ToString()]); //mTabPage[row["COM"].ToString()].BackColor = Color.White; this.tabControl.TabPages.Add(mTabPage[row["COM"].ToString()]); } } catch (Exception ex) { MetroMessageBox.Show(this, ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// COM / BMS 삭제 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonSetDelete_Click(object sender, EventArgs e) { xmlBMSDoc xml = new xmlBMSDoc(); DataTable lineInfoDataTable = xml.ReadLineInfoXMLFile(); DataTable bmsInfoDataTable = xml.ReadBMSInfoXMLFile(); // 현재 선택된 COM 을 가져온다 foreach (DataGridViewRow item in this.dataGridViewSetLine.SelectedRows) { // 전체 라인의 리스트를 체크한다. for (int i = 0; i < lineInfoDataTable.Rows.Count; i++) { // 리스트 내에 선택된 COM과 같은 행을 찾아서 제거한다. if (this.dataGridViewSetLine.Rows[item.Index].Cells[0].Value.Equals(lineInfoDataTable.Rows[i].ItemArray[0])) { lineInfoDataTable.Rows.RemoveAt(i); } } // 리스트에 연결된 BMS ID도 같이 제거하기 위해 전체를 체크한다. for (int i = 0; i < bmsInfoDataTable.Rows.Count; i++) { if (this.dataGridViewSetLine.Rows[item.Index].Cells[0].Value.Equals(bmsInfoDataTable.Rows[i].ItemArray[0])) { bmsInfoDataTable.Rows.RemoveAt(i); i--; } } this.dataGridViewSetLine.Rows.RemoveAt(item.Index); this.dataGridViewSetBMSID.Rows.Clear(); } xml.WriteLineInfoXMLFile(lineInfoDataTable); xml.WriteBMSInfoXMLFile(bmsInfoDataTable); }
private void metroButtonSave_Click(object sender, EventArgs e) { //Thread workerThread = new Thread(new ParameterizedThreadStart(DoWork)); //workerThread.IsBackground = true; //workerThread.Start(); if (dataGridViewErrorStatus.SelectedRows.Count == 0) { MetroMessageBox.Show(this, "변경 내용 없이 종료합니다.", "", MessageBoxButtons.OK, MessageBoxIcon.Warning); this.DialogResult = System.Windows.Forms.DialogResult.Cancel; } this.mTable = (DataTable)this.dataGridViewErrorStatus.DataSource; foreach (DataGridViewRow item in this.dataGridViewErrorStatus.SelectedRows) { //dataGridViewErrorStatus.Rows[item.Index].Cells[1].Value = data.SelectedItem.ToString(); //DoWork(item.Index); xmlBMSDoc doc = new xmlBMSDoc(); doc.UpdateErrorSetInfoXMLFile(mTable, "\\config\\ErrorSetInfo.xml", "ErrorSetInfo", "ERRORSET", this.mCom, this.mBMSID); } }
private void resetControls() { xmlBMSDoc lineList = new xmlBMSDoc(); mLineList = new DataTable(); mLineList = lineList.ReadLineInfoXMLFile(); // COM 포트가 모두 지워졌으면 컨트롤 전체 삭제 //if (mLineList.Rows.Count == 0) //{ // // 삭제 // mTabPageControl.Clear(); // mTabPage.Clear(); // this.tabControl.TabPages.Clear(); //} string[] keyList = new string[mTabPage.Keys.Count]; mTabPage.Keys.CopyTo(keyList, 0); foreach (string key in keyList) { //mLineList. DataRow foundRow = mLineList.Rows.Find(key); if (foundRow != null) { //MessageBox.Show(foundRow[0].ToString()); // 업데이트 mTabPage[key].Text = foundRow["LineName"].ToString(); mTabPageControl[key].resetTabPageControls( foundRow["COM"].ToString(), foundRow["LineName"].ToString(), foundRow["BaudRate"].ToString(), foundRow["Interval"].ToString()); } else { mTabPageControl[key].Stop(); // fix bug (실행중 포트 삭제시 통신이 중지되지 않는 문제) mTabPageControl.Remove(key); this.tabControl.TabPages.Remove(mTabPage[key]); mTabPage.Remove(key); } } // 다중탭 에러발생시 상태관리 mErrorStatus = new bool[mLineList.Rows.Count]; for (int i = 0; i < mLineList.Rows.Count; i++) { mErrorStatus[i] = false; } foreach (DataRow row in mLineList.Rows) { // 없다면 if (!mTabPage.ContainsKey(row["COM"].ToString())) { // 탭 페이지 추가 TabPage tp = new TabPage(row["LineName"].ToString()); tabPageControl tpc = new tabPageControl(this, row["COM"].ToString(), row["LineName"].ToString(), row["BaudRate"].ToString(), row["Interval"].ToString()); tpc.Dock = DockStyle.Fill; mTabPageControl.Add(row["COM"].ToString(), tpc); mTabPageControl[row["COM"].ToString()].ErrorTabPageDraw += MainForm_ErrorTabPageDraw; mTabPage.Add(row["COM"].ToString(), tp); mTabPage[row["COM"].ToString()].Controls.Add(mTabPageControl[row["COM"].ToString()]); //mTabPage[row["COM"].ToString()].BackColor = Color.White; this.tabControl.TabPages.Add(mTabPage[row["COM"].ToString()]); } } }
/// <summary> /// 컨트롤 재설정에 따른 업데이트 /// </summary> /// <param name="com"></param> /// <param name="lineName"></param> /// <param name="baud"></param> /// <param name="interval"></param> public void resetTabPageControls(string com, string lineName, string baud, string interval) { // COM 포트 셋 this.mCom = com; // 탭 이름 셋 this.mLineName = lineName; // 통신주기를 설정 하지 않으면 기본값으로 설정 if (interval == "") { this.mInterval = "1000"; } else { this.mInterval = interval; } // 컨트롤 초기값 설정 initControls(); // BMS 리스트 테이블에 저장 xmlBMSDoc list = new xmlBMSDoc(); mDataTable = list.ReadBMSInfoXMLFile(this.mCom); // 실시간 데이터 저장 테이블 mCommTable = new DataTable(); mCommTable = initCommDataTable(); // 실시간 에러 데이터 저장 테이블 mErrorTable = new DataTable(); mErrorTable = initCommDataTable(); // ID별 에러 테이블 생성 //mErrorSetTable = new DataTable[mDataTable.Rows.Count]; mErrorSetTable.Clear(); // 그리드 뷰, 테이블 초기값 int idx = 0; foreach (DataRow row in mDataTable.Rows) { dataGridViewBMSStatus.Rows.Add(row["Name"], "null", "null", "null", "null", "null", "null", "null", "null", row["Contact1"], row["Contact2"], row["Contact3"], row["Contact4"]); mCommTable.Rows.Add(row["ID"], row["Name"], "null", "null", "null", "null", "null", "null", "null", "null", row["Contact1"], row["Contact2"], row["Contact3"], row["Contact4"], idx); mErrorTable.Rows.Add(row["ID"], row["Name"], "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", idx); DataTable errorSetTable = initDataTableErrorSet(com, row["ID"].ToString()); mErrorSetTable.Add(row["ID"].ToString(), errorSetTable); idx++; } // 통신 컨트롤 mComm = new ModbusSerialAscii(this, mDataTable, mCommTable, mErrorTable, mErrorSetTable); mComm.DataRowErrorInfo += HandleErrorInfoChanged; mComm.LineName = this.mLineName; // 에러카운트 초기화(에러 발생시 탭이 점멸시 확인하는 에러 갯수 - 하나의 에러가 취소 되더라도 다른 애러가 있다면 점멸을 계속 유지하기) mErrorCount = 0; }
public tabPageControl(IWin32Window parent, string com, string lineName, string baud, string interval) { InitializeComponent(); // COM 포트 셋 this.mCom = com; // 탭 이름 셋 this.mLineName = lineName; // 통신주기를 설정 하지 않으면 기본값으로 설정 if (interval == "") { this.mInterval = "1000"; } else { this.mInterval = interval; } // 컨트롤 초기값 설정 initControls(); // BMS xml 파싱 클래스 선언 xmlBMSDoc list = new xmlBMSDoc(); // BMS 리스트 테이블에 읽기 mDataTable = list.ReadBMSInfoXMLFile(this.mCom); // 실시간 데이터 저장 테이블 mCommTable = new DataTable(); mCommTable = initCommDataTable(); // 실시간 에러 데이터 저장 테이블 mErrorTable = new DataTable(); mErrorTable = initCommDataTable(); // ID별 에러 테이블 생성 //mErrorSetTable = new DataTable[mDataTable.Rows.Count]; mErrorSetTable.Clear(); // 그리드 뷰, 테이블 초기값 int idx = 0; foreach (DataRow row in mDataTable.Rows) { dataGridViewBMSStatus.Rows.Add(row["Name"], "null", "null", "null", "null", "null", "null", "null", "null", row["Contact1"], row["Contact2"], row["Contact3"], row["Contact4"]); mCommTable.Rows.Add(row["ID"], row["Name"], "null", "null", "null", "null", "null", "null", "null", "null", row["Contact1"], row["Contact2"], row["Contact3"], row["Contact4"], idx); mErrorTable.Rows.Add(row["ID"], row["Name"], "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", idx); // ID별 에러 테이블 초기화 DataTable errorSetTable = initDataTableErrorSet(com, row["ID"].ToString()); mErrorSetTable.Add(row["ID"].ToString(), errorSetTable); idx++; } // 그리드 메뉴 dataGridViewBMSStatus.ContextMenu = new ContextMenu( new MenuItem[] { new MenuItem("그래프", realTimeGraphEventHandler), new MenuItem("설정", GridClickEventHandler) }); // 마우스 이벤트 dataGridViewBMSStatus.MouseUp += new MouseEventHandler(dataGridView1_MouseUp); // 모드버스 인터페이스 스레드 workerThread = new Thread(new ParameterizedThreadStart(DoWork)); // 통신 컨트롤 mComm = new ModbusSerialAscii(this, mDataTable, mCommTable, mErrorTable, mErrorSetTable); // 통신 컨트롤(에러 발생 이벤트 넘어옴) mComm.DataRowErrorInfo += HandleErrorInfoChanged; mComm.TimeoutPort += HandleTimeoutChanged; mComm.LineName = this.mLineName; mParent = parent; // 실시간 그래프 출력 처리 timer2.Interval = 500; timer2.Tick += new EventHandler(realTimeGraphIntervalTimer_Tick); // 에러카운트 초기화(에러 발생시 탭이 점멸시 확인하는 에러 갯수 - 하나의 에러가 취소 되더라도 다른 애러가 있다면 점멸을 계속 유지하기) mErrorCount = 0; }
public LoadBackUp() { InitializeComponent(); try { // 콤보박스에 시간값 입력 string[] minute = new string[60]; for (int i = 0; i < 60; i++) { minute[i] = string.Format("{0}분", i); } this.metroComboBox_fromMinute.Items.AddRange(minute); this.metroComboBox_toMinute.Items.AddRange(minute); string[] tabName = { " 데이터 조회 ", " 에러 데이터 조회 " }; LoadBackUpControl dataSearchTab = new LoadBackUpControl(this); dataSearchTab.Dock = DockStyle.Fill; mTabPageControl.Add(tabName[0], dataSearchTab); LoadErrorBackUpControl errorDataSearchTab = new LoadErrorBackUpControl(this); errorDataSearchTab.Dock = DockStyle.Fill; mErrorTabPageControl.Add(tabName[1], errorDataSearchTab); foreach (string name in tabName) { TabPage tp = new TabPage(name); mTabPage.Add(name, tp); if (name == " 데이터 조회 ") { mTabPage[name].Controls.Add(mTabPageControl[name]); } else { mTabPage[name].Controls.Add(mErrorTabPageControl[name]); } this.tabControl1.TabPages.Add(mTabPage[name]); } xmlBMSDoc xml = new xmlBMSDoc(); mLineList = xml.ReadLineInfoXMLFile(); foreach (DataRow row in mLineList.Rows) { this.comboBoxLoadBackUpCom.Items.Add(row["LineName"].ToString()); } this.comboBoxLoadBackUpCom.SelectedIndex = 0; DateTime fromTime = DateTime.Now; fromTime = fromTime.AddHours(-1); DateTime toTime = DateTime.Now; this.metroComboBox_fromHour.SelectedIndex = fromTime.Hour; this.metroComboBox_fromMinute.SelectedIndex = fromTime.Minute; this.metroComboBox_toHour.SelectedIndex = toTime.Hour; this.metroComboBox_toMinute.SelectedIndex = toTime.Minute; // 데이터 조회 페이지로 시작 this.metroComboBox_type.SelectedIndex = 0; } catch (Exception ex) { MetroMessageBox.Show(this, "저장된 백업데이터를 찾을 수 없습니다.", "", MessageBoxButtons.OK, MessageBoxIcon.Error); } }