Example #1
0
        /// <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");
        }
Example #2
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;
        }
Example #3
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;
        }
Example #4
0
        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);
            }
        }
Example #5
0
        /// <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);
        }
Example #6
0
        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);
            }
        }
Example #7
0
        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()]);
                }
            }
        }
Example #8
0
        /// <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;
        }
Example #9
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;
        }
Example #10
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);
            }
        }