using System; using System.Linq; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms; using ITC81DB.Forms; using ITC81DB_ImageDll; using ITC81DB.DialogForms; namespace ITC81DB { public partial class ControlConfiModbus : UserControl { #region Field private FormMenu m_ParentForm; #endregion #region Constructor public ControlConfiModbus(FormMenu parent) { InitializeComponent(); this.ParentForm = parent; this.InitializeDesign(); this.DefaultSetting(); } #endregion #region Property public FormMenu ParentForm { get { return this.m_ParentForm; } private set { this.m_ParentForm = value; } } #endregion #region Method public void InitializeDesign() { Class1 images = new Class1(); if (this.ParentForm.ParentForm.SystemConfig1.Language == DataStore.LanguageID.English) { this.smartGroupBox1.Image = new Bitmap(images.GetImage(Class1.ButtonImages.engBackgroundBottomAddOn)); this.labelDiscription2.Text = "- Master(Client) : 16(Write on judgment), Slave(Server) : 04(Send on Master request)"; } else if (this.ParentForm.ParentForm.SystemConfig1.Language == DataStore.LanguageID.Chinese) { this.smartGroupBox1.Image = new Bitmap(images.GetImage(Class1.ButtonImages.chnBackgroundBottomAddOn)); this.labelDiscription2.Text = "- Master(Client) : 16(Write on judgment), Slave(Server) : 04(Send on Master request)"; } else if (this.ParentForm.ParentForm.SystemConfig1.Language == DataStore.LanguageID.Czech) { this.labelDiscription2.Text = "- Master(Client) : 16(Write on judgment), Slave(Server) : 04(Send on Master request)"; } else if (this.ParentForm.ParentForm.SystemConfig1.Language == DataStore.LanguageID.Russian) { this.smartGroupBox1.Image = new Bitmap(images.GetImage(Class1.ButtonImages.rusBackgroundBottomAddOn)); this.labelDiscription2.Text = "- Master(Client) : 16(Write on judgment), Slave(Server) : 04(Send on Master request)"; } else if (this.ParentForm.ParentForm.SystemConfig1.Language == DataStore.LanguageID.German) { this.smartGroupBox1.Image = new Bitmap(images.GetImage(Class1.ButtonImages.gerBackgroundBottomAddOn)); this.labelDiscription2.Text = "- Master(Client) : 16(Write on judgment), Slave(Server) : 04(Send on Master request)"; } else if (this.ParentForm.ParentForm.SystemConfig1.Language == DataStore.LanguageID.Spanish) { this.smartGroupBox1.Image = new Bitmap(images.GetImage(Class1.ButtonImages.engBackgroundBottomAddOn)); this.labelDiscription2.Text = "- Master(Client) : 16(Write on judgment), Slave(Server) : 04(Send on Master request)"; } else { this.smartGroupBox1.Image = new Bitmap(images.GetImage(Class1.ButtonImages.korBackgroundBottomAddOn)); this.labelDiscription2.Text = "- Master(Client) : 16(중량판정 시), Slave(Server) : 04(Master 읽기 요청 시)"; } } private void DefaultSetting() { this.comboBoxRole.Items.Clear(); this.comboBoxRole.Items.Add("Slave"); this.comboBoxRole.Items.Add("Master"); } public void SerialDefaultSettings() { this.ParentForm.ParentForm.ChildFormMainDisplay.MainBottomModbusIconAdd(false); } public void ModbusRTUDefaultSettings() { this.comboBoxRole.Enabled = true; this.labelSlaveID.Enabled = true; this.ParentForm.ParentForm.ChildFormMainDisplay.MainBottomModbusIconAdd(true); } public void OPCSettings() { this.comboBoxRole.SelectedIndexChanged -= new EventHandler(this.comboBoxRole_SelectedIndexChanged); this.comboBoxRole.SelectedIndex = (int)DataStore.ModbusFunction._04_ReadInputRegister; this.comboBoxRole.SelectedIndexChanged += new EventHandler(this.comboBoxRole_SelectedIndexChanged); this.comboBoxRole.Enabled = false; this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSelectFunction = 0; if (this.ParentForm.CurrentConfigurationMenu() == DataStore.MenuBottomConfiguration.SerialCOM1) this.ParentForm.ParentForm.SystemConfig2.ModbusSlaveIDCOM1 = 1; else if (this.ParentForm.CurrentConfigurationMenu() == DataStore.MenuBottomConfiguration.SerialCOM3) this.ParentForm.ParentForm.SystemConfig2.ModbusSlaveIDCOM3 = 1; else if (this.ParentForm.CurrentConfigurationMenu() == DataStore.MenuBottomConfiguration.SerialCOM4) this.ParentForm.ParentForm.SystemConfig2.ModbusSlaveIDCOM4 = 1; this.labelSlaveID.Text = "1"; this.labelSlaveID.Enabled = false; this.ParentForm.ParentForm.SaveSystemConfigurationFile2(this.ParentForm.ParentForm.SystemConfig2); this.ParentForm.ParentForm.ChildFormMainDisplay.MainBottomModbusIconAdd(true); } public void ModbusRTU04Addon() { this.labelFunctions.Text = "04: Read input register"; this.SlaveIDControlVisible(true); this.StartAddressControlVisible(false); } public void ModbusRTU16Addon(DataStore.MenuBottomConfiguration menu) { this.labelFunctions.Text = "16: Write multiple register"; this.labelTitleStartAddress.Location = new Point(134, 116); this.labelStartAddress.Location = new Point(288, 116); this.SlaveIDControlVisible(true); this.StartAddressControlVisible(true); if (menu == DataStore.MenuBottomConfiguration.SerialCOM1) { this.labelSlaveID.Text = this.ParentForm.ParentForm.SystemConfig2.ModbusSlaveIDCOM1.ToString(); this.labelStartAddress.Text = this.ParentForm.ParentForm.SystemConfig3.ModbusRTUStartAddressCOM1.ToString(); } else if (menu == DataStore.MenuBottomConfiguration.SerialCOM3) { this.labelSlaveID.Text = this.ParentForm.ParentForm.SystemConfig2.ModbusSlaveIDCOM3.ToString(); this.labelStartAddress.Text = this.ParentForm.ParentForm.SystemConfig3.ModbusRTUStartAddressCOM3.ToString(); } else if (menu == DataStore.MenuBottomConfiguration.SerialCOM4) { this.labelSlaveID.Text = this.ParentForm.ParentForm.SystemConfig2.ModbusSlaveIDCOM4.ToString(); this.labelStartAddress.Text = this.ParentForm.ParentForm.SystemConfig3.ModbusRTUStartAddressCOM4.ToString(); } } public void ModbusTCP04Addon() { this.labelFunctions.Text = "04: Read input register"; this.SlaveIDControlVisible(false); this.StartAddressControlVisible(false); } public void ModbusTCP16Addon() { this.labelFunctions.Text = "16: Write multiple register"; this.labelTitleStartAddress.Location = new Point(134, 80); this.labelStartAddress.Location = new Point(288, 80); this.SlaveIDControlVisible(false); this.StartAddressControlVisible(true); this.labelStartAddress.Text = this.ParentForm.ParentForm.SystemConfig3.ModbusTCPStartAddress.ToString(); } private void SlaveIDControlVisible(bool visible) { if (visible == true) { this.labelTitleSlaveID.Visible = true; this.labelSlaveID.Visible = true; } else { this.labelTitleSlaveID.Visible = false; this.labelSlaveID.Visible = false; } } private void StartAddressControlVisible(bool visible) { if (visible == true) { this.labelTitleStartAddress.Visible = true; this.labelStartAddress.Visible = true; } else { this.labelTitleStartAddress.Visible = false; this.labelStartAddress.Visible = false; } } public void DisplayRefresh(DataStore.MenuBottomConfiguration menu) { this.comboBoxRole.SelectedIndexChanged -= new EventHandler(this.comboBoxRole_SelectedIndexChanged); if (menu == DataStore.MenuBottomConfiguration.Ethernet) { if (this.ParentForm.ParentForm.SystemConfig2.EthernetCommMode == (int)DataStore.EthernetMode.f16_OPC) { this.ParentForm.ParentForm.SystemConfig2.ModbusTCPSelectFunction = (int)DataStore.ModbusFunction._04_ReadInputRegister; this.comboBoxRole.SelectedIndex = this.ParentForm.ParentForm.SystemConfig2.ModbusTCPSelectFunction; this.ModbusTCP04Addon(); } else { if (this.ParentForm.ParentForm.SystemConfig2.EthernetOperationMode == 1) this.ParentForm.ParentForm.SystemConfig2.ModbusTCPSelectFunction = (int)DataStore.ModbusFunction._04_ReadInputRegister; else if (this.ParentForm.ParentForm.SystemConfig2.EthernetOperationMode == 2) this.ParentForm.ParentForm.SystemConfig2.ModbusTCPSelectFunction = (int)DataStore.ModbusFunction._16_WriteMultipleRegister; this.comboBoxRole.SelectedIndex = this.ParentForm.ParentForm.SystemConfig2.ModbusTCPSelectFunction; if (this.ParentForm.ParentForm.SystemConfig2.ModbusTCPSelectFunction == (int)DataStore.ModbusFunction._04_ReadInputRegister) this.ModbusTCP04Addon(); else this.ModbusTCP16Addon(); } this.labelDiscription1.Visible = false; this.comboBoxRole.Enabled = false; } else { if (this.ParentForm.ParentForm.SystemConfig1.SerialCOM1Mode == (int)DataStore.EthernetMode.f16_OPC || this.ParentForm.ParentForm.SystemConfig1.SerialCOM3Mode == (int)DataStore.EthernetMode.f16_OPC || this.ParentForm.ParentForm.SystemConfig1.SerialCOM4Mode == (int)DataStore.EthernetMode.f16_OPC) { this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSelectFunction = (int)DataStore.ModbusFunction._04_ReadInputRegister; this.comboBoxRole.SelectedIndex = this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSelectFunction; this.comboBoxRole.Enabled = false; this.ModbusRTU04Addon(); } else { this.comboBoxRole.SelectedIndex = this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSelectFunction; this.comboBoxRole.Enabled = true; if (this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSelectFunction == (int)DataStore.ModbusFunction._04_ReadInputRegister) this.ModbusRTU04Addon(); else this.ModbusRTU16Addon(menu); } this.labelDiscription1.Visible = true; } this.comboBoxRole.SelectedIndexChanged += new EventHandler(this.comboBoxRole_SelectedIndexChanged); } #endregion #region Event Handler // Slave ID는 Modbus TCP에서는 0x01로 고정 private void labelSlaveID_Click(object sender, EventArgs e) { DialogFormNumKeyPad myKeyPad = new DialogFormNumKeyPad(this.labelSlaveID.Text, 3, 0, false, this.ParentForm.ParentForm.SystemConfig1.Language); if (myKeyPad.ShowDialog() == DialogResult.OK) { if (myKeyPad.doubleValue < 0 || myKeyPad.doubleValue > 255) { // 입력범위를 확인하세요 DialogFormMessage myMsg = new DialogFormMessage(1, this.ParentForm.ParentForm.SystemConfig1.Language); myMsg.ShowDialog(); } else { this.labelSlaveID.Text = myKeyPad.StringValue; if (this.ParentForm.CurrentConfigurationMenu() == DataStore.MenuBottomConfiguration.SerialCOM1) this.ParentForm.ParentForm.SystemConfig2.ModbusSlaveIDCOM1 = myKeyPad.IntValue; else if (this.ParentForm.CurrentConfigurationMenu() == DataStore.MenuBottomConfiguration.SerialCOM3) this.ParentForm.ParentForm.SystemConfig2.ModbusSlaveIDCOM3 = myKeyPad.IntValue; else if (this.ParentForm.CurrentConfigurationMenu() == DataStore.MenuBottomConfiguration.SerialCOM4) this.ParentForm.ParentForm.SystemConfig2.ModbusSlaveIDCOM4 = myKeyPad.IntValue; this.ParentForm.ParentForm.SaveSystemConfigurationFile2(this.ParentForm.ParentForm.SystemConfig2); } } } private void labelStartAddress_Click(object sender, EventArgs e) { DialogFormNumKeyPad myKeyPad = new DialogFormNumKeyPad(this.labelStartAddress.Text, 5, 0, false, this.ParentForm.ParentForm.SystemConfig1.Language); if (myKeyPad.ShowDialog() == DialogResult.OK) { if (myKeyPad.doubleValue < 0 || myKeyPad.doubleValue > 99999) { // 입력범위를 확인하세요 DialogFormMessage myMsg = new DialogFormMessage(1, this.ParentForm.ParentForm.SystemConfig1.Language); myMsg.ShowDialog(); } else { this.labelStartAddress.Text = myKeyPad.StringValue; if (this.ParentForm.CurrentConfigurationMenu() == DataStore.MenuBottomConfiguration.SerialCOM1) this.ParentForm.ParentForm.SystemConfig3.ModbusRTUStartAddressCOM1 = myKeyPad.IntValue; else if (this.ParentForm.CurrentConfigurationMenu() == DataStore.MenuBottomConfiguration.SerialCOM3) this.ParentForm.ParentForm.SystemConfig3.ModbusRTUStartAddressCOM3 = myKeyPad.IntValue; else if (this.ParentForm.CurrentConfigurationMenu() == DataStore.MenuBottomConfiguration.SerialCOM4) this.ParentForm.ParentForm.SystemConfig3.ModbusRTUStartAddressCOM4 = myKeyPad.IntValue; else this.ParentForm.ParentForm.SystemConfig3.ModbusTCPStartAddress = myKeyPad.IntValue; this.ParentForm.ParentForm.SaveSystemConfigurationFile3(this.ParentForm.ParentForm.SystemConfig3); } } } private void comboBoxRole_SelectedIndexChanged(object sender, EventArgs e) { DataStore.MenuBottomConfiguration menu = this.ParentForm.CurrentConfigurationMenu(); if (menu == DataStore.MenuBottomConfiguration.Ethernet) { this.ParentForm.ParentForm.SystemConfig2.ModbusTCPSelectFunction = this.comboBoxRole.SelectedIndex; if (this.comboBoxRole.SelectedIndex == (int)DataStore.ModbusFunction._04_ReadInputRegister) this.ModbusTCP04Addon(); else this.ModbusTCP16Addon(); } else { this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSelectFunction = this.comboBoxRole.SelectedIndex; if (this.comboBoxRole.SelectedIndex == (int)DataStore.ModbusFunction._04_ReadInputRegister) this.ModbusRTU04Addon(); else this.ModbusRTU16Addon(menu); } this.ParentForm.ParentForm.SaveSystemConfigurationFile2(this.ParentForm.ParentForm.SystemConfig2); } private void labelReadTimeout_Click(object sender, EventArgs e) { DialogFormNumKeyPad myKeyPad = new DialogFormNumKeyPad(this.labelReadTimeout.Text, 4, 0, false, this.ParentForm.ParentForm.SystemConfig1.Language); if (myKeyPad.ShowDialog() == DialogResult.OK) { if (myKeyPad.doubleValue < 0 || myKeyPad.doubleValue > 9999) { // 입력범위를 확인하세요 DialogFormMessage myMsg = new DialogFormMessage(1, this.ParentForm.ParentForm.SystemConfig1.Language); myMsg.ShowDialog(); } else { this.labelReadTimeout.Text = myKeyPad.StringValue; // 코드 완성 안됨. 추후 사용하게 되면 추가 작업해야함 } } } #endregion } }