using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace IControls_FireManager { // cyim 2016.08.26 // 대용량 수신기를 위해 기존의 코드중 15 번 통신카드는 이제 0번으로 대체해야한다. - 엑셀파일 포맷이 변경해야함 // 수신기는 최대 8개의 통신카드 (통신카드당 2계통 커버) => 총 16 계통 // 중계반은 최대 60개이고 (중계반은 4계통을 커버) -> 총 240 계통 // 예외처리 사항 // 1) 통신보드중 15번카드는 이제 0번카드로 대체 (IO 신호용) // 2) IO 보드는 어차피 셋팅이 의미없음 public partial class Form_Receiver_Port_BigReceiver : Form { _RECEIVER RECEIVER; string RECEIVER_ID; // 최대 64개 (수신기 8개 + 중계반 60개) , 단 UI 접근성을 위해 배열 인덱스를 그대로 사용하려함 Boolean[] bCOMM_Use = new Boolean[65]; Boolean[] bCOMM_CH1Use = new Boolean[65]; Boolean[] bCOMM_CH2Use = new Boolean[65]; Boolean[] bCOMM_CH3Use = new Boolean[65]; Boolean[] bCOMM_CH4Use = new Boolean[65]; Boolean[] bIO_Use = new Boolean[16]; public Form_Receiver_Port_BigReceiver(int iIndex) { InitializeComponent(); RECEIVER_ID = Convert.ToString(iIndex); RECEIVER = (_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]; ReceiverToObj(); } private void UiButton_Confirm_Click(object sender, EventArgs e) { try { ObjToReceiver(); ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).Port4CommBoard = RECEIVER.Port4CommBoard; ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).Port4IOBoard = RECEIVER.Port4IOBoard; ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).Port4KeyPAD = RECEIVER.Port4KeyPAD; ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).Port4EmergencyBroadcast = RECEIVER.Port4EmergencyBroadcast; // DB 에 저장 Form_Receiver_Add DbSave_For_Form_Receiver_Add = new Form_Receiver_Add(Int32.Parse(((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).ID)); DbSave_For_Form_Receiver_Add._Event_Project_Receiver_Save_Event(); // 완료 이벤트 발생 _Event.WorkViewPageName_Receiver_SendMessage_Write(RECEIVER.ID); // 저장하였습니다 _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.SaveInform, 0); // 프로젝트 수정 _Data.ProJect_Save_Complete = false; Close(); } catch (Exception ex) { // LOG _Event.DebugView_SendMessage_Write(ex.ToString()); } } // RECEIVER 객체의 값으로 화면 오브젝트의 값을 세팅한다. private void ReceiverToObj() { // GroupBox 데이터 넣기 (통신보드, IO보드, KeyPad, 비상방송 통신 관련 사항) gb_COMM1.Text = "통신보드 : " + RECEIVER.Port4CommBoard.Get_COM_PORT(); gb_COMM2.Text = "IO보드 : " + RECEIVER.Port4IOBoard.Get_COM_PORT(); gb_COMM3.Text = "키패드 : " + RECEIVER.Port4KeyPAD.Get_COM_PORT(); gb_COMM4.Text = "비상방송 : " + RECEIVER.Port4EmergencyBroadcast.Get_COM_PORT(); cb_COMM_USE.Checked = RECEIVER.Port4CommBoard.Use_Flag; cb_IO_USE.Checked = RECEIVER.Port4IOBoard.Use_Flag; cb_KEYPAD_USE.Checked = RECEIVER.Port4KeyPAD.Use_Flag; cb_EMER_USE.Checked = RECEIVER.Port4EmergencyBroadcast.Use_Flag; // 통신 보드 cb_COMM1_PORT.SelectedIndex = RECEIVER.Port4CommBoard.PortNo - 1; cb_COMM1_BAUDRATE.Text = RECEIVER.Port4CommBoard.Get_COM_BAUDRATE(); cb_COMM1_DATABITS.Text = RECEIVER.Port4CommBoard.DataBits.ToString(); cb_COMM1_STOPBITS.Text = RECEIVER.Port4CommBoard.Get_COM_STOPBIT(); cb_COMM1_PARITY.Text = RECEIVER.Port4CommBoard.Get_COM_PARITY(); // I/O 보드 cb_COMM2_PORT.SelectedIndex = RECEIVER.Port4IOBoard.PortNo - 1; cb_COMM2_BAUDRATE.Text = RECEIVER.Port4IOBoard.Get_COM_BAUDRATE(); cb_COMM2_DATABITS.Text = RECEIVER.Port4IOBoard.DataBits.ToString(); cb_COMM2_STOPBITS.Text = RECEIVER.Port4IOBoard.Get_COM_STOPBIT(); cb_COMM2_PARITY.Text = RECEIVER.Port4IOBoard.Get_COM_PARITY(); // KeyPad cb_COMM3_PORT.SelectedIndex = RECEIVER.Port4KeyPAD.PortNo - 1; cb_COMM3_BAUDRATE.Text = RECEIVER.Port4KeyPAD.Get_COM_BAUDRATE(); cb_COMM3_DATABITS.Text = RECEIVER.Port4KeyPAD.DataBits.ToString(); cb_COMM3_STOPBITS.Text = RECEIVER.Port4KeyPAD.Get_COM_STOPBIT(); cb_COMM3_PARITY.Text = RECEIVER.Port4KeyPAD.Get_COM_PARITY(); // 비상방송 cb_COMM4_PORT.SelectedIndex = RECEIVER.Port4EmergencyBroadcast.PortNo - 1; cb_COMM4_BAUDRATE.Text = RECEIVER.Port4EmergencyBroadcast.Get_COM_BAUDRATE(); cb_COMM4_DATABITS.Text = RECEIVER.Port4EmergencyBroadcast.DataBits.ToString(); cb_COMM4_STOPBITS.Text = RECEIVER.Port4EmergencyBroadcast.Get_COM_STOPBIT(); cb_COMM4_PARITY.Text = RECEIVER.Port4EmergencyBroadcast.Get_COM_PARITY(); // 통신보드 및 중계반 foreach (string COM_BOARD_ID in ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).List_COM_BOARD_ID) { int iID; iID = ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).BOARD_ID; // BOARDID if ((iID > -1) && (iID < 65)) // cyim 2017.02.02 : IFC3300 에서는 통신보드, IO 보드 아이디가 0번이 존재한다 { // ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).BOARD_NAME; // BOARDID bCOMM_CH1Use[iID] = ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bCh1_Use_Flag; bCOMM_CH2Use[iID] = ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bCh2_Use_Flag; bCOMM_CH3Use[iID] = ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bCh3_Use_Flag; bCOMM_CH4Use[iID] = ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bCh4_Use_Flag; bCOMM_Use[iID] = ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bUse_Flag; // Use Flag } } // IO 보드 foreach (string IO_BOARD_ID in ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).List_IO_BOARD_ID) { int iID; iID = ((_IO_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_IO_BOARD[IO_BOARD_ID]).BOARD_ID; // BOARDID if ((iID > -1) && (iID < 16)) // cyim 2017.02.02 : IFC3300 에서는 통신보드, IO 보드 아이디가 0번이 존재한다 { // ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).BOARD_NAME; // BOARDID bIO_Use[iID] = ((_IO_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_IO_BOARD[IO_BOARD_ID]).bUse_Flag; // Use Flag } } // 체크 박스 설정 for (int i = 0; i < 65; i++) // cyim 2017.02.02 : IFC3300 에서는 통신보드, IO 보드 아이디가 0번이 존재한다 { // // 통신보드 // // 사용 여부 Control[] ctrl1 = this.Controls.Find(string.Format("cb_COMM{0}_Use", i), true); ((CheckBox)ctrl1[0]).Checked = bCOMM_Use[i]; // 채널 체크여부 Control[] ctrl2 = this.Controls.Find(string.Format("cb_COMM{0}_CH1Use", i), true); ((CheckBox)ctrl2[0]).Checked = bCOMM_CH1Use[i]; Control[] ctrl3 = this.Controls.Find(string.Format("cb_COMM{0}_CH2Use", i), true); ((CheckBox)ctrl3[0]).Checked = bCOMM_CH2Use[i]; //if (i > 8) // 9번 즉 중계반부터 채널이 4개이다 { Control[] ctrl4 = this.Controls.Find(string.Format("cb_COMM{0}_CH3Use", i), true); ((CheckBox)ctrl4[0]).Checked = bCOMM_CH3Use[i]; Control[] ctrl5 = this.Controls.Find(string.Format("cb_COMM{0}_CH4Use", i), true); ((CheckBox)ctrl5[0]).Checked = bCOMM_CH4Use[i]; } // // IO 보드 // if (i <= 15) { Control[] ctrl6 = this.Controls.Find(string.Format("cb_IO{0}_Use", i), true); ((CheckBox)ctrl6[0]).Checked = bIO_Use[i]; } } } // 화면 오브젝트의 값을 RECEIVER 객체로 보낸다. private void ObjToReceiver() { // 포트 RECEIVER.Port4CommBoard.Use_Flag = cb_COMM_USE.Checked; RECEIVER.Port4IOBoard.Use_Flag = cb_IO_USE.Checked; RECEIVER.Port4KeyPAD.Use_Flag = cb_KEYPAD_USE.Checked; RECEIVER.Port4EmergencyBroadcast.Use_Flag = cb_EMER_USE.Checked; // 통신 보드 RECEIVER.Port4CommBoard.PortNo = cb_COMM1_PORT.SelectedIndex + 1; RECEIVER.Port4CommBoard.BaudRate = Util.StrToInt(cb_COMM1_BAUDRATE.Text, 0); RECEIVER.Port4CommBoard.DataBits = Util.StrToInt(cb_COMM1_DATABITS.Text, 0); RECEIVER.Port4CommBoard.Set_StopBits(cb_COMM1_STOPBITS.Text); RECEIVER.Port4CommBoard.Set_Parity(cb_COMM1_PARITY.Text); // I/O 보드 RECEIVER.Port4IOBoard.PortNo = cb_COMM2_PORT.SelectedIndex + 1; RECEIVER.Port4IOBoard.BaudRate = Util.StrToInt(cb_COMM2_BAUDRATE.Text, 0); RECEIVER.Port4IOBoard.DataBits = Util.StrToInt(cb_COMM2_DATABITS.Text, 0); RECEIVER.Port4IOBoard.Set_StopBits(cb_COMM2_STOPBITS.Text); RECEIVER.Port4IOBoard.Set_Parity(cb_COMM2_PARITY.Text); // KeyPad RECEIVER.Port4KeyPAD.PortNo = cb_COMM3_PORT.SelectedIndex + 1; RECEIVER.Port4KeyPAD.BaudRate = Util.StrToInt(cb_COMM3_BAUDRATE.Text, 0); RECEIVER.Port4KeyPAD.DataBits = Util.StrToInt(cb_COMM3_DATABITS.Text, 0); RECEIVER.Port4KeyPAD.Set_StopBits(cb_COMM3_STOPBITS.Text); RECEIVER.Port4KeyPAD.Set_Parity(cb_COMM3_PARITY.Text); // 비상방송 RECEIVER.Port4EmergencyBroadcast.PortNo = cb_COMM4_PORT.SelectedIndex + 1; RECEIVER.Port4EmergencyBroadcast.BaudRate = Util.StrToInt(cb_COMM4_BAUDRATE.Text, 0); RECEIVER.Port4EmergencyBroadcast.DataBits = Util.StrToInt(cb_COMM4_DATABITS.Text, 0); RECEIVER.Port4EmergencyBroadcast.Set_StopBits(cb_COMM4_STOPBITS.Text); RECEIVER.Port4EmergencyBroadcast.Set_Parity(cb_COMM4_PARITY.Text); // 체크 박스 설정 for (int i = 0; i < 65; i++) // cyim 2017.02.02 : IFC3300 에서는 통신보드, IO 보드 아이디가 0번이 존재한다 { // // 통신보드 // // 사용 여부 Control[] ctrl1 = this.Controls.Find(string.Format("cb_COMM{0}_Use", i), true); bCOMM_Use[i] = ((CheckBox)ctrl1[0]).Checked; // 채널 체크여부 Control[] ctrl2 = this.Controls.Find(string.Format("cb_COMM{0}_CH1Use", i), true); bCOMM_CH1Use[i] = ((CheckBox)ctrl2[0]).Checked; Control[] ctrl3 = this.Controls.Find(string.Format("cb_COMM{0}_CH2Use", i), true); bCOMM_CH2Use[i] = ((CheckBox)ctrl3[0]).Checked; //if (i > 8) // 9번 즉 중계반부터 채널이 4개이다 { Control[] ctrl4 = this.Controls.Find(string.Format("cb_COMM{0}_CH3Use", i), true); bCOMM_CH3Use[i] = ((CheckBox)ctrl4[0]).Checked; Control[] ctrl5 = this.Controls.Find(string.Format("cb_COMM{0}_CH4Use", i), true); bCOMM_CH4Use[i] = ((CheckBox)ctrl5[0]).Checked; } // // IO 보드 // if (i <= 15) { Control[] ctrl6 = this.Controls.Find(string.Format("cb_IO{0}_Use", i), true); bIO_Use[i] = ((CheckBox)ctrl6[0]).Checked; } } foreach (string COM_BOARD_ID in ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).List_COM_BOARD_ID) { int iID; iID = ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).BOARD_ID; // BOARDID if ((iID > -1) && (iID < 65)) // cyim 2017.02.02 : IFC3300 에서는 통신보드, IO 보드 아이디가 0번이 존재한다 { //((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).BOARD_NAME, // BOARDID ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bCh1_Use_Flag = bCOMM_CH1Use[iID]; ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bCh2_Use_Flag = bCOMM_CH2Use[iID]; ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bCh3_Use_Flag = bCOMM_CH3Use[iID]; ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bCh4_Use_Flag = bCOMM_CH4Use[iID]; ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bUse_Flag = bCOMM_Use[iID]; ; // Use Flag } } foreach (string IO_BOARD_ID in ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).List_IO_BOARD_ID) { int iID; iID = ((_IO_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_IO_BOARD[IO_BOARD_ID]).BOARD_ID; // BOARDID if ((iID > -1) && (iID < 16)) // cyim 2017.02.02 : IFC3300 에서는 통신보드, IO 보드 아이디가 0번이 존재한다 { // ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).BOARD_NAME; // BOARDID ((_IO_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_IO_BOARD[IO_BOARD_ID]).bUse_Flag = bIO_Use[iID]; // Use Flag } } // cyim 2014.5.22 입출력수정을 해도 변동이 없는 상황 수정 // COM 이 활성화되면 보드에서 당연히 사용한다 ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).KEYPAD.bUse_Flag = cb_KEYPAD_USE.Checked; ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).EMERGENCY_BROADCAST.Set_Use_Flag((cb_EMER_USE.Checked == true) ? "Y" : "N"); } // 취소 버튼을 누르면, 그냥 화면을 닫는다. private void UiButton_cancel_Click(object sender, EventArgs e) { Close(); } private void checkBox_All_1_CheckedChanged(object sender, EventArgs e) { bool check = this.checkBox_All_1.Checked; for (int i = 1; i <= 21; i++) { // 사용 여부 Control[] ctrl1 = this.Controls.Find(string.Format("cb_COMM{0}_Use", i), true); ((CheckBox)ctrl1[0]).Checked = check; // 채널 체크여부 Control[] ctrl2 = this.Controls.Find(string.Format("cb_COMM{0}_CH1Use", i), true); ((CheckBox)ctrl2[0]).Checked = check; Control[] ctrl3 = this.Controls.Find(string.Format("cb_COMM{0}_CH2Use", i), true); ((CheckBox)ctrl3[0]).Checked = check; Control[] ctrl4 = this.Controls.Find(string.Format("cb_COMM{0}_CH3Use", i), true); ((CheckBox)ctrl4[0]).Checked = check; Control[] ctrl5 = this.Controls.Find(string.Format("cb_COMM{0}_CH4Use", i), true); ((CheckBox)ctrl5[0]).Checked = check; } } private void checkBox_All_2_CheckedChanged(object sender, EventArgs e) { bool check = this.checkBox_All_2.Checked; for (int i = 22; i <= 43; i++) { // 사용 여부 Control[] ctrl1 = this.Controls.Find(string.Format("cb_COMM{0}_Use", i), true); ((CheckBox)ctrl1[0]).Checked = check; // 채널 체크여부 Control[] ctrl2 = this.Controls.Find(string.Format("cb_COMM{0}_CH1Use", i), true); ((CheckBox)ctrl2[0]).Checked = check; Control[] ctrl3 = this.Controls.Find(string.Format("cb_COMM{0}_CH2Use", i), true); ((CheckBox)ctrl3[0]).Checked = check; Control[] ctrl4 = this.Controls.Find(string.Format("cb_COMM{0}_CH3Use", i), true); ((CheckBox)ctrl4[0]).Checked = check; Control[] ctrl5 = this.Controls.Find(string.Format("cb_COMM{0}_CH4Use", i), true); ((CheckBox)ctrl5[0]).Checked = check; } } private void checkBox_All_3_CheckedChanged(object sender, EventArgs e) { bool check = this.checkBox_All_3.Checked; for (int i = 44; i <= 64; i++) { // 사용 여부 Control[] ctrl1 = this.Controls.Find(string.Format("cb_COMM{0}_Use", i), true); ((CheckBox)ctrl1[0]).Checked = check; // 채널 체크여부 Control[] ctrl2 = this.Controls.Find(string.Format("cb_COMM{0}_CH1Use", i), true); ((CheckBox)ctrl2[0]).Checked = check; Control[] ctrl3 = this.Controls.Find(string.Format("cb_COMM{0}_CH2Use", i), true); ((CheckBox)ctrl3[0]).Checked = check; Control[] ctrl4 = this.Controls.Find(string.Format("cb_COMM{0}_CH3Use", i), true); ((CheckBox)ctrl4[0]).Checked = check; Control[] ctrl5 = this.Controls.Find(string.Format("cb_COMM{0}_CH4Use", i), true); ((CheckBox)ctrl5[0]).Checked = check; } } // // IO보드 // private void checkBox_All_5_CheckedChanged(object sender, EventArgs e) { bool check = this.checkBox_All_5.Checked; for (int i = 0; i <= 15; i++) // cyim 2017.02.02 : IFC3300 에서는 통신보드, IO 보드 아이디가 0번이 존재한다 { // 사용 여부 Control[] ctrl1 = this.Controls.Find(string.Format("cb_IO{0}_Use", i), true); ((CheckBox)ctrl1[0]).Checked = check; } } } }