diff --git a/ITC81DB_0H/Controls/CenterConfiguration/ControlCenterConfiEthernet.Designer.cs b/ITC81DB_0H/Controls/CenterConfiguration/ControlCenterConfiEthernet.Designer.cs index 8e3e5e6..c36abaa 100644 --- a/ITC81DB_0H/Controls/CenterConfiguration/ControlCenterConfiEthernet.Designer.cs +++ b/ITC81DB_0H/Controls/CenterConfiguration/ControlCenterConfiEthernet.Designer.cs @@ -57,6 +57,7 @@ this.buttonStop = new SmartX.SmartButton(); this.buttonStart = new SmartX.SmartButton(); this.timerServer = new System.Windows.Forms.Timer(); + this.buttonPingTimer = new SmartX.SmartButton(); this.smartGroupBox1.SuspendLayout(); this.SuspendLayout(); // @@ -64,6 +65,7 @@ // this.smartGroupBox1.BackPictureBox = null; this.smartGroupBox1.BackPictureBox1 = null; + this.smartGroupBox1.Controls.Add(this.buttonPingTimer); this.smartGroupBox1.Controls.Add(this.buttonAddon); this.smartGroupBox1.Controls.Add(this.buttonLocalIP); this.smartGroupBox1.Controls.Add(this.labelReceive); @@ -552,7 +554,7 @@ this.labelClientCount.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold); this.labelClientCount.InitVisible = true; this.labelClientCount.LineSpacing = 0F; - this.labelClientCount.Location = new System.Drawing.Point(497, 230); + this.labelClientCount.Location = new System.Drawing.Point(20, 240); this.labelClientCount.Name = "labelClientCount"; this.labelClientCount.Size = new System.Drawing.Size(94, 28); this.labelClientCount.TabIndex = 1; @@ -618,7 +620,7 @@ this.smartListBoxClientList.ItemOffsetGap = 0; this.smartListBoxClientList.ItemOffsetX = 0; this.smartListBoxClientList.ItemOffsetY = 0; - this.smartListBoxClientList.Location = new System.Drawing.Point(497, 264); + this.smartListBoxClientList.Location = new System.Drawing.Point(20, 274); this.smartListBoxClientList.MouseMoveEventSpace = 3; this.smartListBoxClientList.MouseMoveSpace = 10; this.smartListBoxClientList.Name = "smartListBoxClientList"; @@ -708,6 +710,39 @@ this.timerServer.Interval = 1000; this.timerServer.Tick += new System.EventHandler(this.timerServer_Tick); // + // buttonPingTimer + // + this.buttonPingTimer.BackPictureBox = null; + this.buttonPingTimer.BackPictureBox1 = null; + this.buttonPingTimer.BackPictureBox2 = null; + this.buttonPingTimer.ButtonColor = System.Drawing.Color.Gray; + this.buttonPingTimer.ButtonImageAutoSize = true; + this.buttonPingTimer.ColorKeySamplePosition = new System.Drawing.Point(0, 0); + this.buttonPingTimer.DisableImage = null; + this.buttonPingTimer.DownImage = null; + this.buttonPingTimer.GroupID = 0; + this.buttonPingTimer.InitVisible = true; + this.buttonPingTimer.Location = new System.Drawing.Point(499, 284); + this.buttonPingTimer.Mode = SmartX.SmartButton.BUTTONMODE.PUSH; + this.buttonPingTimer.Name = "buttonPingTimer"; + this.buttonPingTimer.NestedClickEventPrevent = false; + this.buttonPingTimer.OutlinePixel = 1; + this.buttonPingTimer.RepeatInterval = 200; + this.buttonPingTimer.RepeatIntervalAccelerate = null; + this.buttonPingTimer.SafeInterval = 200; + this.buttonPingTimer.Size = new System.Drawing.Size(91, 43); + this.buttonPingTimer.SpecialFunction = SmartX.SmartButton.SPECIALFUNC.NONE; + this.buttonPingTimer.TabIndex = 185; + this.buttonPingTimer.Text = "Ping Open"; + this.buttonPingTimer.TextColor = System.Drawing.Color.Black; + this.buttonPingTimer.TextDownColor = System.Drawing.Color.White; + this.buttonPingTimer.TextHAlign = SmartX.SmartButton.TextHorAlign.Middle; + this.buttonPingTimer.TextLocation = new System.Drawing.Point(0, 0); + this.buttonPingTimer.TextVAlign = SmartX.SmartButton.TextVerAlign.Middle; + this.buttonPingTimer.UpImage = null; + this.buttonPingTimer.Visible = false; + this.buttonPingTimer.Click += new System.EventHandler(this.buttonPingTimer_Click); + // // ControlCenterConfiEthernet // this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); @@ -750,5 +785,6 @@ private SmartX.SmartLabel labelFormat; private SmartX.SmartButton buttonLocalIP; private SmartX.SmartButton buttonAddon; + private SmartX.SmartButton buttonPingTimer; } } diff --git a/ITC81DB_0H/Controls/CenterConfiguration/ControlCenterConfiEthernet.cs b/ITC81DB_0H/Controls/CenterConfiguration/ControlCenterConfiEthernet.cs index cdfc484..873e0d2 100644 --- a/ITC81DB_0H/Controls/CenterConfiguration/ControlCenterConfiEthernet.cs +++ b/ITC81DB_0H/Controls/CenterConfiguration/ControlCenterConfiEthernet.cs @@ -25,6 +25,9 @@ namespace ITC81DB_0H.Controls public ControlConfiEthernetLocalIP ControlEthernetLocalIP; public ControlConfiSerialHitachi ControlHitachi; public ControlConfiSerialMarkoPrint ControlMarkoprint; + public ControlConfiModbus ControlModbusTCP; + + private delegate void ConnetedIPStatusCallback(string value); #endregion #region Constructor @@ -185,6 +188,10 @@ namespace ITC81DB_0H.Controls this.Controls.Add(this.ControlMarkoprint); this.ControlMarkoprint.Location = new Point(0, 217); + this.ControlModbusTCP = new ControlConfiModbus(this.ParentForm); + this.Controls.Add(this.ControlModbusTCP); + this.ControlModbusTCP.Location = new Point(0, 217); + if (this.ParentForm.ParentForm.SystemConfig2.IsEthernetEnable == true) { this.buttonStart.Enabled = true; @@ -242,7 +249,7 @@ namespace ITC81DB_0H.Controls this.comboBoxEthernetMode.Items.Add("Smart Jet"); // 19 this.comboBoxEthernetMode.Items.Add("imaje 9410 OPT3"); // 한맥 20 this.comboBoxEthernetMode.Items.Add("-"); // Impinj Speedway-R420(RFID) 21 - this.comboBoxEthernetMode.Items.Add("-"); // 모드버스 TCP 22 + this.comboBoxEthernetMode.Items.Add("Modbus TCP"); // 모드버스 TCP 22 this.comboBoxEthernetMode.Items.Add("STD2"); // STD2 23 } else @@ -386,11 +393,35 @@ namespace ITC81DB_0H.Controls this.labelLocalPort.BackColor = Color.White; } } + public void DisplayHiddenMenu(bool bValue) + { + if (bValue == true) + { + this.buttonPingTimer.Visible = true; + } + else + { + this.buttonPingTimer.Visible = false; + } + } + private void ButtonAddOnDisplay() + { + this.DisplayBottomSettingMenu(); + + if (this.comboBoxEthernetMode.SelectedIndex == (int)DataStore.EthernetMode.f9_Hitachi + || this.comboBoxEthernetMode.SelectedIndex == (int)DataStore.EthernetMode.f11_Markoprint + || this.comboBoxEthernetMode.SelectedIndex == (int)DataStore.EthernetMode.f16_OPC + || this.comboBoxEthernetMode.SelectedIndex == (int)DataStore.EthernetMode.f22_Modbus_TCP) + this.buttonAddon.Visible = true; + else + this.buttonAddon.Visible = false; + } private void ControlVisible(bool visible) { this.ControlHitachi.Visible = visible; this.ControlMarkoprint.Visible = visible; + this.ControlModbusTCP.Visible = visible; } private void DisplayBottomSettingMenu() { @@ -398,24 +429,40 @@ namespace ITC81DB_0H.Controls this.buttonTestSend.Enabled = true; - if (this.comboBoxEthernetMode.SelectedIndex == 9) + if (this.comboBoxEthernetMode.SelectedIndex == (int)DataStore.EthernetMode.f9_Hitachi) { this.ControlHitachi.Visible = true; this.ControlHitachi.BringToFront(); this.ControlHitachi.DisplayRefresh(this.ParentForm.CurrentConfigurationMenu()); } - else if (this.comboBoxEthernetMode.SelectedIndex == 11) + else if (this.comboBoxEthernetMode.SelectedIndex == (int)DataStore.EthernetMode.f11_Markoprint) { this.ControlMarkoprint.Visible = true; this.ControlMarkoprint.BringToFront(); this.ControlMarkoprint.DisplayRefresh(this.ParentForm.CurrentConfigurationMenu()); } + else if (this.comboBoxEthernetMode.SelectedIndex == (int)DataStore.EthernetMode.f22_Modbus_TCP + || this.comboBoxEthernetMode.SelectedIndex == (int)DataStore.EthernetMode.f16_OPC) + { + this.ControlModbusTCP.DisplayRefresh(this.ParentForm.CurrentConfigurationMenu()); + this.ControlModbusTCP.Visible = true; + this.ControlModbusTCP.BringToFront(); + } else { } } + private void ConnectedIPStatusOut(string value) + { + this.labelConnectedIP.Text = value; + } + public void DelegateConnectedIPStatusOut(string value) + { + this.Invoke(new ConnetedIPStatusCallback(this.ConnectedIPStatusOut), value); + } + public void DisplayRefresh(SystemStatus status) { this.ParentForm.ParentForm.CurrentSystemStatus.CurrentDisplay = DataStore.DisplayStore.ConfiEthernet; @@ -449,6 +496,7 @@ namespace ITC81DB_0H.Controls this.UpdateLabelFormatDisplay(); + this.DisplayHiddenMenu(false); if (this.comboBoxEthernetOpMode.SelectedIndex == 1) { this.buttonStart.Enabled = true; @@ -487,6 +535,7 @@ namespace ITC81DB_0H.Controls } this.labelLocalPort.Text = this.ParentForm.ParentForm.SystemConfig2.EthernetLocalPort.ToString(); + this.ButtonAddOnDisplay(); this.buttonSave.Enabled = false; } #endregion @@ -1209,6 +1258,22 @@ namespace ITC81DB_0H.Controls this.ControlEthernetLocalIP.DisplayRefresh(); } + private void buttonPingTimer_Click(object sender, EventArgs e) + { + if (this.buttonPingTimer.ButtonStatus == SmartButton.BUTSTATUS.DOWN) + { + this.ParentForm.ParentForm.SystemConfig2.IsEthernetPingTimer = true; + this.buttonPingTimer.Text = "Ping Close"; + this.ParentForm.ParentForm.IsUsingTimerEthernetPing(true); + } + else + { + this.ParentForm.ParentForm.SystemConfig2.IsEthernetPingTimer = false; + this.buttonPingTimer.Text = "Ping Open"; + this.ParentForm.ParentForm.IsUsingTimerEthernetPing(false); + } + } + private void comboBoxEthernetMode_SelectedIndexChanged(object sender, EventArgs e) { if (this.comboBoxEthernetMode.SelectedIndex == 16) // OPC @@ -1279,14 +1344,28 @@ namespace ITC81DB_0H.Controls else mode = this.comboBoxEthernetMode.SelectedIndex; this.ParentForm.ParentForm.SystemConfig2.EthernetCommMode = mode; + + if (this.ParentForm.ParentForm.SystemConfig1.SerialCOM1Mode == (int)DataStore.SerialMode.f22_Modbus_RTU + || this.ParentForm.ParentForm.SystemConfig1.SerialCOM3Mode == (int)DataStore.SerialMode.f22_Modbus_RTU + || this.ParentForm.ParentForm.SystemConfig1.SerialCOM4Mode == (int)DataStore.SerialMode.f22_Modbus_RTU + || this.ParentForm.ParentForm.SystemConfig2.EthernetCommMode == (int)DataStore.EthernetMode.f22_Modbus_TCP + || this.ParentForm.ParentForm.SystemConfig1.SerialCOM1Mode == (int)DataStore.SerialMode.f16_OPC + || this.ParentForm.ParentForm.SystemConfig1.SerialCOM3Mode == (int)DataStore.SerialMode.f16_OPC + || this.ParentForm.ParentForm.SystemConfig1.SerialCOM4Mode == (int)DataStore.SerialMode.f16_OPC + || this.ParentForm.ParentForm.SystemConfig2.EthernetCommMode == (int)DataStore.EthernetMode.f16_OPC) + this.ParentForm.ParentForm.ChildFormMainDisplay.MainBottomModbusIconAdd(true); + else + this.ParentForm.ParentForm.ChildFormMainDisplay.MainBottomModbusIconAdd(false); + this.ParentForm.ParentForm.SaveSystemConfigurationFile2(this.ParentForm.ParentForm.SystemConfig2); + this.ButtonAddOnDisplay(); this.buttonSave.Enabled = false; } private void buttonAddon_Click(object sender, EventArgs e) { - if (this.ControlHitachi.Visible == false && this.ControlMarkoprint.Visible == false) + if (this.ControlHitachi.Visible == false && this.ControlMarkoprint.Visible == false && this.ControlModbusTCP.Visible == false) this.DisplayBottomSettingMenu(); else { diff --git a/ITC81DB_0H/Controls/CenterConfiguration/ControlCenterConfiOptionBoard.cs b/ITC81DB_0H/Controls/CenterConfiguration/ControlCenterConfiOptionBoard.cs index 536ff36..e87d01d 100644 --- a/ITC81DB_0H/Controls/CenterConfiguration/ControlCenterConfiOptionBoard.cs +++ b/ITC81DB_0H/Controls/CenterConfiguration/ControlCenterConfiOptionBoard.cs @@ -52,7 +52,7 @@ namespace ITC81DB_0H.Controls else if (value == 2) this.ControlOPT2.InitializeDesign(); - this.ParentForm.ParentForm.ChildFormMainDisplay.CurrentBottomMenuControlEnable(DataStore.EquipmentStatus.Stop); + this.ParentForm.ParentForm.ChildFormMainDisplay.CurrentBottomMenuControlEnable(); } private void DefaultSetting() { diff --git a/ITC81DB_0H/Controls/CenterConfiguration/ControlCenterConfiSerial.cs b/ITC81DB_0H/Controls/CenterConfiguration/ControlCenterConfiSerial.cs index cbc609e..5974977 100644 --- a/ITC81DB_0H/Controls/CenterConfiguration/ControlCenterConfiSerial.cs +++ b/ITC81DB_0H/Controls/CenterConfiguration/ControlCenterConfiSerial.cs @@ -21,12 +21,14 @@ namespace ITC81DB_0H.Controls public partial class ControlCenterConfiSerial : UserControl { #region Field - private int m_ModeSTD2; + private static int ModeSTD2 = 4; + private FormMenu m_ParentForm; public ControlConfiSerialUserDefine ControlUserDefine; public ControlConfiSerialHitachi ControlHitachi; public ControlConfiSerialMarkoPrint ControlMarkoprint; public ControlConfiSerialBarcode ControlBarcode; + public ControlConfiModbus ControlModbusRTU; #endregion #region Constructor @@ -47,11 +49,6 @@ namespace ITC81DB_0H.Controls get { return this.m_ParentForm; } private set { this.m_ParentForm = value; } } - public int ModeSTD2 - { - get { return this.m_ModeSTD2; } - set { this.m_ModeSTD2 = value; } - } #endregion #region Method @@ -147,7 +144,9 @@ namespace ITC81DB_0H.Controls this.Controls.Add(this.ControlBarcode); this.ControlBarcode.Location = new Point(0, 217); - this.ModeSTD2 = 4; + this.ControlModbusRTU = new ControlConfiModbus(this.ParentForm); + this.Controls.Add(this.ControlModbusRTU); + this.ControlModbusRTU.Location = new Point(0, 217); this.ControlVisible(false); @@ -193,7 +192,7 @@ namespace ITC81DB_0H.Controls this.comboBoxSerialMode.Items.Add("Smart Jet"); // Smart Jet 19 this.comboBoxSerialMode.Items.Add("imaje 9410 OPT3"); // 한맥 20 this.comboBoxSerialMode.Items.Add("-"); // RFID 21 - this.comboBoxSerialMode.Items.Add("-"); // 모드버스 RTU 22 + this.comboBoxSerialMode.Items.Add("Modbus RTU"); // 모드버스 RTU 22 this.comboBoxSerialMode.Items.Add("STD2"); // STD2 23 //this.comboBoxSerialMode.Items.Add("Barcode"); //this.comboBoxSerialMode.Items.Add("User Define"); @@ -315,13 +314,18 @@ namespace ITC81DB_0H.Controls this.ControlUserDefine.Visible = visible; this.ControlHitachi.Visible = visible; this.ControlMarkoprint.Visible = visible; + this.ControlModbusRTU.Visible = visible; //this.ControlBarcode.Visible = visible; } private void ButtonAddOnDisplay() { this.ControlVisible(false); + this.DisplayBottomSettingMenu(); - if (this.comboBoxSerialMode.SelectedIndex == 9 || this.comboBoxSerialMode.SelectedIndex == 11) + if (this.comboBoxSerialMode.SelectedIndex == (int)DataStore.SerialMode.f9_Hitachi + || this.comboBoxSerialMode.SelectedIndex == (int)DataStore.SerialMode.f11_Markoprint + || this.comboBoxSerialMode.SelectedIndex == (int)DataStore.SerialMode.f16_OPC + || this.comboBoxSerialMode.SelectedIndex == (int)DataStore.SerialMode.f22_Modbus_RTU) this.buttonAddon.Visible = true; else this.buttonAddon.Visible = false; @@ -353,7 +357,7 @@ namespace ITC81DB_0H.Controls if (this.ParentForm.ParentForm.SystemConfig2.IsCommunicationOption == false) { if (item.SerialCOM1Mode == (int)DataStore.SerialMode.f23_STD2) - this.comboBoxSerialMode.SelectedIndex = this.ModeSTD2; + this.comboBoxSerialMode.SelectedIndex = ModeSTD2; else if (item.SerialCOM1Mode > this.comboBoxSerialMode.Items.Count - 1) this.comboBoxSerialMode.SelectedIndex = 0; else @@ -366,6 +370,16 @@ namespace ITC81DB_0H.Controls this.comboBoxSerialMode.SelectedIndexChanged += new EventHandler(this.comboBoxSerialMode_SelectedIndexChanged); this.labelTransmissionDelayTime.Text = item.TransmissionDelayTimeCOM1.ToString(); + + if (this.ParentForm.ParentForm.SystemConfig1.SerialCOM1Mode == (int)DataStore.SerialMode.f16_OPC) + { + this.comboBoxSerialBaudRate.Enabled = false; + this.ControlModbusRTU.OPCSettings(); + } + else if (this.ParentForm.ParentForm.SystemConfig1.SerialCOM1Mode == (int)DataStore.SerialMode.f22_Modbus_RTU) + this.ControlModbusRTU.ModbusRTUDefaultSettings(); + else + this.ControlModbusRTU.SerialDefaultSettings(); #endregion break; case DataStore.MenuBottomConfiguration.SerialCOM3: @@ -413,7 +427,7 @@ namespace ITC81DB_0H.Controls if (this.ParentForm.ParentForm.SystemConfig2.IsCommunicationOption == false) { if (item.SerialCOM3Mode == (int)DataStore.SerialMode.f23_STD2) - this.comboBoxSerialMode.SelectedIndex = this.ModeSTD2; + this.comboBoxSerialMode.SelectedIndex = ModeSTD2; else if (item.SerialCOM3Mode > this.comboBoxSerialMode.Items.Count - 1) this.comboBoxSerialMode.SelectedIndex = 0; else @@ -426,6 +440,16 @@ namespace ITC81DB_0H.Controls this.comboBoxSerialMode.SelectedIndexChanged += new EventHandler(this.comboBoxSerialMode_SelectedIndexChanged); this.labelTransmissionDelayTime.Text = this.ParentForm.ParentForm.SystemConfig1.TransmissionDelayTimeCOM3.ToString(); + + if (this.ParentForm.ParentForm.SystemConfig1.SerialCOM3Mode == (int)DataStore.SerialMode.f16_OPC) // OPC + { + this.comboBoxSerialBaudRate.Enabled = false; + this.ControlModbusRTU.OPCSettings(); + } + else if (this.ParentForm.ParentForm.SystemConfig1.SerialCOM3Mode == (int)DataStore.SerialMode.f22_Modbus_RTU) + this.ControlModbusRTU.ModbusRTUDefaultSettings(); + else + this.ControlModbusRTU.SerialDefaultSettings(); } #endregion break; @@ -441,7 +465,7 @@ namespace ITC81DB_0H.Controls if (this.ParentForm.ParentForm.SystemConfig2.IsCommunicationOption == false) { if (item.SerialCOM4Mode == (int)DataStore.SerialMode.f23_STD2) - this.comboBoxSerialMode.SelectedIndex = this.ModeSTD2; + this.comboBoxSerialMode.SelectedIndex = ModeSTD2; else if (item.SerialCOM4Mode > this.comboBoxSerialMode.Items.Count - 1) this.comboBoxSerialMode.SelectedIndex = 0; else @@ -454,6 +478,16 @@ namespace ITC81DB_0H.Controls this.comboBoxSerialMode.SelectedIndexChanged += new EventHandler(this.comboBoxSerialMode_SelectedIndexChanged); this.labelTransmissionDelayTime.Text = item.TransmissionDelayTimeCOM4.ToString(); + + if (this.ParentForm.ParentForm.SystemConfig1.SerialCOM4Mode == (int)DataStore.SerialMode.f16_OPC) // OPC + { + this.comboBoxSerialBaudRate.Enabled = false; + this.ControlModbusRTU.OPCSettings(); + } + else if (this.ParentForm.ParentForm.SystemConfig1.SerialCOM4Mode == (int)DataStore.SerialMode.f22_Modbus_RTU) + this.ControlModbusRTU.ModbusRTUDefaultSettings(); + else + this.ControlModbusRTU.SerialDefaultSettings(); #endregion break; default: @@ -473,40 +507,45 @@ namespace ITC81DB_0H.Controls { DataStore.MenuBottomConfiguration temp = this.ParentForm.CurrentConfigurationMenu(); + this.ParentForm.ParentForm.ChangeSerialCOM3FrameBufferSize(1024); + this.ParentForm.ParentForm.ChangeSerialCOM3ReceiveDetect(SmartX.SmartSerialPort.RECEIVEDETECTTYPE.EVENT_QUEUE); + if (this.comboBoxSerialMode.SelectedIndex == (int)DataStore.SerialMode.f16_OPC) { + this.ControlModbusRTU.OPCSettings(); + #region OPC switch (temp) { case DataStore.MenuBottomConfiguration.SerialCOM1: - this.ParentForm.ParentForm.CloseModbusSlaveCOM1(); this.ParentForm.ParentForm.CloseSerialCOM1(); this.ParentForm.ParentForm.SystemConfig1.SerialCOM1BaudRate = 0; this.comboBoxSerialBaudRate.SelectedIndexChanged -= new EventHandler(this.comboBoxSerialBaudRate_SelectedIndexChanged); this.comboBoxSerialBaudRate.SelectedIndex = 0; this.comboBoxSerialBaudRate.SelectedIndexChanged += new EventHandler(this.comboBoxSerialBaudRate_SelectedIndexChanged); + this.comboBoxSerialBaudRate.Enabled = false; this.ParentForm.ParentForm.SystemConfig1.SerialCOM1Mode = (int)DataStore.SerialMode.f16_OPC; - this.ParentForm.ParentForm.OpenModbusSlaveCOM1(); + this.ParentForm.ParentForm.OpenSerialCOM1(); break; case DataStore.MenuBottomConfiguration.SerialCOM3: - this.ParentForm.ParentForm.CloseModbusSlaveCOM3(); this.ParentForm.ParentForm.CloseSerialCOM3(); this.ParentForm.ParentForm.SystemConfig1.SerialCOM3BaudRate = 0; this.comboBoxSerialBaudRate.SelectedIndexChanged -= new EventHandler(this.comboBoxSerialBaudRate_SelectedIndexChanged); this.comboBoxSerialBaudRate.SelectedIndex = 0; this.comboBoxSerialBaudRate.SelectedIndexChanged += new EventHandler(this.comboBoxSerialBaudRate_SelectedIndexChanged); + this.comboBoxSerialBaudRate.Enabled = false; this.ParentForm.ParentForm.SystemConfig1.SerialCOM3Mode = (int)DataStore.SerialMode.f16_OPC; - this.ParentForm.ParentForm.OpenModbusSlaveCOM3(); + this.ParentForm.ParentForm.OpenSerialCOM3(); break; case DataStore.MenuBottomConfiguration.SerialCOM4: - this.ParentForm.ParentForm.CloseModbusSlaveCOM4(); this.ParentForm.ParentForm.CloseSerialCOM4(); this.ParentForm.ParentForm.SystemConfig1.SerialCOM4BaudRate = 0; this.comboBoxSerialBaudRate.SelectedIndexChanged -= new EventHandler(this.comboBoxSerialBaudRate_SelectedIndexChanged); this.comboBoxSerialBaudRate.SelectedIndex = 0; this.comboBoxSerialBaudRate.SelectedIndexChanged += new EventHandler(this.comboBoxSerialBaudRate_SelectedIndexChanged); + this.comboBoxSerialBaudRate.Enabled = false; this.ParentForm.ParentForm.SystemConfig1.SerialCOM4Mode = (int)DataStore.SerialMode.f16_OPC; - this.ParentForm.ParentForm.OpenModbusSlaveCOM4(); + this.ParentForm.ParentForm.OpenSerialCOM4(); break; default: break; @@ -519,8 +558,6 @@ namespace ITC81DB_0H.Controls switch (temp) { case DataStore.MenuBottomConfiguration.SerialCOM1: - this.ParentForm.ParentForm.CloseModbusCOM1(); - this.ParentForm.ParentForm.CloseModbusSlaveCOM1(); this.ParentForm.ParentForm.CloseSerialCOM1(); this.comboBoxSerialBaudRate.SelectedIndexChanged -= new EventHandler(this.comboBoxSerialBaudRate_SelectedIndexChanged); this.comboBoxSerialBaudRate.SelectedIndex = 4; @@ -531,8 +568,6 @@ namespace ITC81DB_0H.Controls this.ParentForm.ParentForm.OpenSerialCOM1(); break; case DataStore.MenuBottomConfiguration.SerialCOM3: - this.ParentForm.ParentForm.CloseModbusCOM3(); - this.ParentForm.ParentForm.CloseModbusSlaveCOM3(); this.ParentForm.ParentForm.CloseSerialCOM3(); this.comboBoxSerialBaudRate.SelectedIndexChanged -= new EventHandler(this.comboBoxSerialBaudRate_SelectedIndexChanged); this.comboBoxSerialBaudRate.SelectedIndex = 4; @@ -543,8 +578,6 @@ namespace ITC81DB_0H.Controls this.ParentForm.ParentForm.OpenSerialCOM3(); break; case DataStore.MenuBottomConfiguration.SerialCOM4: - this.ParentForm.ParentForm.CloseModbusCOM4(); - this.ParentForm.ParentForm.CloseModbusSlaveCOM4(); this.ParentForm.ParentForm.CloseSerialCOM4(); this.comboBoxSerialBaudRate.SelectedIndexChanged -= new EventHandler(this.comboBoxSerialBaudRate_SelectedIndexChanged); this.comboBoxSerialBaudRate.SelectedIndex = 4; @@ -559,58 +592,16 @@ namespace ITC81DB_0H.Controls } #endregion } - else if (this.comboBoxSerialMode.SelectedIndex == (int)DataStore.SerialMode.f22_Modbus_RTU) - { - #region Modbus RTU - switch (temp) - { - case DataStore.MenuBottomConfiguration.SerialCOM1: - this.ParentForm.ParentForm.CloseModbusCOM1(); - this.ParentForm.ParentForm.CloseModbusSlaveCOM1(); - this.ParentForm.ParentForm.CloseSerialCOM1(); - this.ParentForm.ParentForm.SystemConfig1.SerialCOM1BaudRate = baudrate; - this.ParentForm.ParentForm.SystemConfig1.SerialCOM1Mode = (int)DataStore.SerialMode.f22_Modbus_RTU; - if (this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSelectFunction == 0) - this.ParentForm.ParentForm.OpenModbusSlaveCOM1(); - else if (this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSelectFunction == 1) - this.ParentForm.ParentForm.OpenModbusCOM1(); - break; - case DataStore.MenuBottomConfiguration.SerialCOM3: - this.ParentForm.ParentForm.CloseModbusCOM3(); - this.ParentForm.ParentForm.CloseModbusSlaveCOM3(); - this.ParentForm.ParentForm.CloseSerialCOM3(); - this.ParentForm.ParentForm.SystemConfig1.SerialCOM3BaudRate = baudrate; - this.ParentForm.ParentForm.SystemConfig1.SerialCOM3Mode = (int)DataStore.SerialMode.f22_Modbus_RTU; - if (this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSelectFunction == 0) - this.ParentForm.ParentForm.OpenModbusSlaveCOM3(); - else if (this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSelectFunction == 1) - this.ParentForm.ParentForm.OpenModbusCOM3(); - break; - case DataStore.MenuBottomConfiguration.SerialCOM4: - this.ParentForm.ParentForm.CloseModbusCOM4(); - this.ParentForm.ParentForm.CloseModbusSlaveCOM4(); - this.ParentForm.ParentForm.CloseSerialCOM4(); - this.ParentForm.ParentForm.SystemConfig1.SerialCOM4BaudRate = baudrate; - this.ParentForm.ParentForm.SystemConfig1.SerialCOM4Mode = (int)DataStore.SerialMode.f22_Modbus_RTU; - if (this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSelectFunction == 0) - this.ParentForm.ParentForm.OpenModbusSlaveCOM4(); - else if (this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSelectFunction == 1) - this.ParentForm.ParentForm.OpenModbusCOM4(); - break; - default: - break; - } - #endregion - } else { + this.ControlModbusRTU.SerialDefaultSettings(); + switch (temp) { case DataStore.MenuBottomConfiguration.SerialCOM1: - this.ParentForm.ParentForm.CloseModbusSlaveCOM1(); this.ParentForm.ParentForm.CloseSerialCOM1(); this.ParentForm.ParentForm.SystemConfig1.SerialCOM1BaudRate = baudrate; - if (this.ParentForm.ParentForm.SystemConfig2.IsCommunicationOption == false && mode == this.ModeSTD2) + if (this.ParentForm.ParentForm.SystemConfig2.IsCommunicationOption == false && mode == ModeSTD2) this.ParentForm.ParentForm.SystemConfig1.SerialCOM1Mode = (int)DataStore.SerialMode.f23_STD2; else this.ParentForm.ParentForm.SystemConfig1.SerialCOM1Mode = mode; @@ -618,10 +609,9 @@ namespace ITC81DB_0H.Controls this.ParentForm.ParentForm.OpenSerialCOM1(); break; case DataStore.MenuBottomConfiguration.SerialCOM3: - this.ParentForm.ParentForm.CloseModbusSlaveCOM3(); this.ParentForm.ParentForm.CloseSerialCOM3(); this.ParentForm.ParentForm.SystemConfig1.SerialCOM3BaudRate = baudrate; - if (this.ParentForm.ParentForm.SystemConfig2.IsCommunicationOption == false && mode == this.ModeSTD2) + if (this.ParentForm.ParentForm.SystemConfig2.IsCommunicationOption == false && mode == ModeSTD2) this.ParentForm.ParentForm.SystemConfig1.SerialCOM3Mode = (int)DataStore.SerialMode.f23_STD2; else this.ParentForm.ParentForm.SystemConfig1.SerialCOM3Mode = mode; @@ -629,10 +619,9 @@ namespace ITC81DB_0H.Controls this.ParentForm.ParentForm.OpenSerialCOM3(); break; case DataStore.MenuBottomConfiguration.SerialCOM4: - this.ParentForm.ParentForm.CloseModbusSlaveCOM4(); this.ParentForm.ParentForm.CloseSerialCOM4(); this.ParentForm.ParentForm.SystemConfig1.SerialCOM4BaudRate = baudrate; - if (this.ParentForm.ParentForm.SystemConfig2.IsCommunicationOption == false && mode == this.ModeSTD2) + if (this.ParentForm.ParentForm.SystemConfig2.IsCommunicationOption == false && mode == ModeSTD2) this.ParentForm.ParentForm.SystemConfig1.SerialCOM4Mode = (int)DataStore.SerialMode.f23_STD2; else this.ParentForm.ParentForm.SystemConfig1.SerialCOM4Mode = mode; @@ -642,6 +631,14 @@ namespace ITC81DB_0H.Controls default: break; } + + if (this.ParentForm.ParentForm.SystemConfig1.SerialCOM1Mode == (int)DataStore.SerialMode.f22_Modbus_RTU + || this.ParentForm.ParentForm.SystemConfig1.SerialCOM3Mode == (int)DataStore.SerialMode.f22_Modbus_RTU + || this.ParentForm.ParentForm.SystemConfig1.SerialCOM4Mode == (int)DataStore.SerialMode.f22_Modbus_RTU + || this.ParentForm.ParentForm.SystemConfig2.EthernetCommMode == (int)DataStore.EthernetMode.f22_Modbus_TCP) + this.ParentForm.ParentForm.ChildFormMainDisplay.MainBottomModbusIconAdd(true); + else + this.ParentForm.ParentForm.ChildFormMainDisplay.MainBottomModbusIconAdd(false); } this.ParentForm.ParentForm.SaveSystemConfigurationFile1(this.ParentForm.ParentForm.SystemConfig1); @@ -668,18 +665,25 @@ namespace ITC81DB_0H.Controls this.buttonTestSend.Enabled = true; - if (this.comboBoxSerialMode.SelectedIndex == 9) + if (this.comboBoxSerialMode.SelectedIndex == (int)DataStore.SerialMode.f9_Hitachi) { this.ControlHitachi.Visible = true; this.ControlHitachi.BringToFront(); this.ControlHitachi.DisplayRefresh(this.ParentForm.CurrentConfigurationMenu()); } - else if (this.comboBoxSerialMode.SelectedIndex == 11) + else if (this.comboBoxSerialMode.SelectedIndex == (int)DataStore.SerialMode.f11_Markoprint) { this.ControlMarkoprint.Visible = true; this.ControlMarkoprint.BringToFront(); this.ControlMarkoprint.DisplayRefresh(this.ParentForm.CurrentConfigurationMenu()); } + else if (this.comboBoxSerialMode.SelectedIndex == (int)DataStore.SerialMode.f22_Modbus_RTU + || this.comboBoxSerialMode.SelectedIndex == (int)DataStore.SerialMode.f16_OPC) + { + this.ControlModbusRTU.Visible = true; + this.ControlModbusRTU.BringToFront(); + this.ControlModbusRTU.DisplayRefresh(this.ParentForm.CurrentConfigurationMenu()); + } else { @@ -691,7 +695,7 @@ namespace ITC81DB_0H.Controls private void buttonAddon_Click(object sender, EventArgs e) { if (this.ControlUserDefine.Visible == false && this.ControlHitachi.Visible == false && this.ControlMarkoprint.Visible == false - && this.ControlBarcode.Visible == false) + && this.ControlBarcode.Visible == false && this.ControlModbusRTU.Visible == false) this.DisplayBottomSettingMenu(); else { @@ -1219,7 +1223,6 @@ namespace ITC81DB_0H.Controls { this.buttonSave.Enabled = true; } - private void comboBoxSerialMode_SelectedIndexChanged(object sender, EventArgs e) { if(this.comboBoxSerialMode.SelectedIndex == 16) // OPC diff --git a/ITC81DB_0H/Controls/CenterEquipment/ControlCenterEquipFunctionSetting.Designer.cs b/ITC81DB_0H/Controls/CenterEquipment/ControlCenterEquipFunctionSetting.Designer.cs index 4de0e4b..982c949 100644 --- a/ITC81DB_0H/Controls/CenterEquipment/ControlCenterEquipFunctionSetting.Designer.cs +++ b/ITC81DB_0H/Controls/CenterEquipment/ControlCenterEquipFunctionSetting.Designer.cs @@ -203,10 +203,10 @@ this.smartGroupBox2.FrameStyle = SmartX.SmartGroupBox.FRAMESTYLES.Rectangle; this.smartGroupBox2.Image = null; this.smartGroupBox2.InitVisible = true; - this.smartGroupBox2.Location = new System.Drawing.Point(405, 43); + this.smartGroupBox2.Location = new System.Drawing.Point(436, 43); this.smartGroupBox2.Name = "smartGroupBox2"; this.smartGroupBox2.RoundRadius = 5; - this.smartGroupBox2.Size = new System.Drawing.Size(296, 184); + this.smartGroupBox2.Size = new System.Drawing.Size(265, 184); this.smartGroupBox2.TabIndex = 151; this.smartGroupBox2.TextColor = System.Drawing.Color.Black; this.smartGroupBox2.Visible = false; @@ -222,9 +222,9 @@ this.labelExternalInputMessage2.ForeColor = System.Drawing.Color.Gold; this.labelExternalInputMessage2.InitVisible = true; this.labelExternalInputMessage2.LineSpacing = 0F; - this.labelExternalInputMessage2.Location = new System.Drawing.Point(26, 63); + this.labelExternalInputMessage2.Location = new System.Drawing.Point(14, 62); this.labelExternalInputMessage2.Name = "labelExternalInputMessage2"; - this.labelExternalInputMessage2.Size = new System.Drawing.Size(253, 20); + this.labelExternalInputMessage2.Size = new System.Drawing.Size(235, 20); this.labelExternalInputMessage2.TabIndex = 194; this.labelExternalInputMessage2.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; this.labelExternalInputMessage2.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; @@ -241,14 +241,14 @@ this.labelExternalInputMessage1.ForeColor = System.Drawing.Color.Gold; this.labelExternalInputMessage1.InitVisible = true; this.labelExternalInputMessage1.LineSpacing = 0F; - this.labelExternalInputMessage1.Location = new System.Drawing.Point(26, 43); + this.labelExternalInputMessage1.Location = new System.Drawing.Point(14, 19); this.labelExternalInputMessage1.Name = "labelExternalInputMessage1"; - this.labelExternalInputMessage1.Size = new System.Drawing.Size(253, 20); + this.labelExternalInputMessage1.Size = new System.Drawing.Size(235, 53); this.labelExternalInputMessage1.TabIndex = 193; - this.labelExternalInputMessage1.Text = "배출, 공압, 비상정지, 적체"; + this.labelExternalInputMessage1.Text = "배출, 공압, 비상정지, 적체, 금속검출"; this.labelExternalInputMessage1.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; this.labelExternalInputMessage1.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; - this.labelExternalInputMessage1.Wordwrap = false; + this.labelExternalInputMessage1.Wordwrap = true; // // buttonExternalInputBuzzer // @@ -262,7 +262,7 @@ this.buttonExternalInputBuzzer.DownImage = ((System.Drawing.Image)(resources.GetObject("buttonExternalInputBuzzer.DownImage"))); this.buttonExternalInputBuzzer.GroupID = 0; this.buttonExternalInputBuzzer.InitVisible = true; - this.buttonExternalInputBuzzer.Location = new System.Drawing.Point(191, 88); + this.buttonExternalInputBuzzer.Location = new System.Drawing.Point(171, 88); this.buttonExternalInputBuzzer.Mode = SmartX.SmartButton.BUTTONMODE.PUSH; this.buttonExternalInputBuzzer.Name = "buttonExternalInputBuzzer"; this.buttonExternalInputBuzzer.NestedClickEventPrevent = false; @@ -293,7 +293,7 @@ this.buttonExternalInputLamp.DownImage = ((System.Drawing.Image)(resources.GetObject("buttonExternalInputLamp.DownImage"))); this.buttonExternalInputLamp.GroupID = 0; this.buttonExternalInputLamp.InitVisible = true; - this.buttonExternalInputLamp.Location = new System.Drawing.Point(191, 122); + this.buttonExternalInputLamp.Location = new System.Drawing.Point(171, 122); this.buttonExternalInputLamp.Mode = SmartX.SmartButton.BUTTONMODE.PUSH; this.buttonExternalInputLamp.Name = "buttonExternalInputLamp"; this.buttonExternalInputLamp.NestedClickEventPrevent = false; @@ -325,7 +325,7 @@ this.labelTitleExternalInputLamp.LineSpacing = 0F; this.labelTitleExternalInputLamp.Location = new System.Drawing.Point(26, 122); this.labelTitleExternalInputLamp.Name = "labelTitleExternalInputLamp"; - this.labelTitleExternalInputLamp.Size = new System.Drawing.Size(149, 28); + this.labelTitleExternalInputLamp.Size = new System.Drawing.Size(139, 28); this.labelTitleExternalInputLamp.TabIndex = 190; this.labelTitleExternalInputLamp.Text = "램프"; this.labelTitleExternalInputLamp.TextHAlign = SmartX.SmartLabel.TextHorAlign.Left; @@ -345,7 +345,7 @@ this.labelTitleExternalInputBuzzer.LineSpacing = 0F; this.labelTitleExternalInputBuzzer.Location = new System.Drawing.Point(26, 88); this.labelTitleExternalInputBuzzer.Name = "labelTitleExternalInputBuzzer"; - this.labelTitleExternalInputBuzzer.Size = new System.Drawing.Size(149, 28); + this.labelTitleExternalInputBuzzer.Size = new System.Drawing.Size(139, 28); this.labelTitleExternalInputBuzzer.TabIndex = 189; this.labelTitleExternalInputBuzzer.Text = "부저"; this.labelTitleExternalInputBuzzer.TextHAlign = SmartX.SmartLabel.TextHorAlign.Left; @@ -355,45 +355,45 @@ // comboBoxPIN2 // this.comboBoxPIN2.Font = new System.Drawing.Font("새굴림", 14F, System.Drawing.FontStyle.Bold); - this.comboBoxPIN2.Location = new System.Drawing.Point(131, 53); + this.comboBoxPIN2.Location = new System.Drawing.Point(116, 53); this.comboBoxPIN2.Name = "comboBoxPIN2"; - this.comboBoxPIN2.Size = new System.Drawing.Size(268, 28); + this.comboBoxPIN2.Size = new System.Drawing.Size(314, 28); this.comboBoxPIN2.TabIndex = 186; this.comboBoxPIN2.SelectedIndexChanged += new System.EventHandler(this.comboBoxPIN2_SelectedIndexChanged); // // comboBoxPIN3 // this.comboBoxPIN3.Font = new System.Drawing.Font("새굴림", 14F, System.Drawing.FontStyle.Bold); - this.comboBoxPIN3.Location = new System.Drawing.Point(131, 87); + this.comboBoxPIN3.Location = new System.Drawing.Point(116, 87); this.comboBoxPIN3.Name = "comboBoxPIN3"; - this.comboBoxPIN3.Size = new System.Drawing.Size(268, 28); + this.comboBoxPIN3.Size = new System.Drawing.Size(314, 28); this.comboBoxPIN3.TabIndex = 185; this.comboBoxPIN3.SelectedIndexChanged += new System.EventHandler(this.comboBoxPIN3_SelectedIndexChanged); // // comboBoxPIN4 // this.comboBoxPIN4.Font = new System.Drawing.Font("새굴림", 14F, System.Drawing.FontStyle.Bold); - this.comboBoxPIN4.Location = new System.Drawing.Point(131, 121); + this.comboBoxPIN4.Location = new System.Drawing.Point(116, 121); this.comboBoxPIN4.Name = "comboBoxPIN4"; - this.comboBoxPIN4.Size = new System.Drawing.Size(268, 28); + this.comboBoxPIN4.Size = new System.Drawing.Size(314, 28); this.comboBoxPIN4.TabIndex = 184; this.comboBoxPIN4.SelectedIndexChanged += new System.EventHandler(this.comboBoxPIN4_SelectedIndexChanged); // // comboBoxPIN5 // this.comboBoxPIN5.Font = new System.Drawing.Font("새굴림", 14F, System.Drawing.FontStyle.Bold); - this.comboBoxPIN5.Location = new System.Drawing.Point(131, 155); + this.comboBoxPIN5.Location = new System.Drawing.Point(116, 155); this.comboBoxPIN5.Name = "comboBoxPIN5"; - this.comboBoxPIN5.Size = new System.Drawing.Size(268, 28); + this.comboBoxPIN5.Size = new System.Drawing.Size(314, 28); this.comboBoxPIN5.TabIndex = 183; this.comboBoxPIN5.SelectedIndexChanged += new System.EventHandler(this.comboBoxPIN5_SelectedIndexChanged); // // comboBoxPIN6 // this.comboBoxPIN6.Font = new System.Drawing.Font("새굴림", 14F, System.Drawing.FontStyle.Bold); - this.comboBoxPIN6.Location = new System.Drawing.Point(131, 189); + this.comboBoxPIN6.Location = new System.Drawing.Point(116, 189); this.comboBoxPIN6.Name = "comboBoxPIN6"; - this.comboBoxPIN6.Size = new System.Drawing.Size(268, 28); + this.comboBoxPIN6.Size = new System.Drawing.Size(314, 28); this.comboBoxPIN6.TabIndex = 182; this.comboBoxPIN6.SelectedIndexChanged += new System.EventHandler(this.comboBoxPIN6_SelectedIndexChanged); // @@ -409,7 +409,7 @@ this.labelPIn2.LineSpacing = 0F; this.labelPIn2.Location = new System.Drawing.Point(15, 53); this.labelPIn2.Name = "labelPIn2"; - this.labelPIn2.Size = new System.Drawing.Size(110, 28); + this.labelPIn2.Size = new System.Drawing.Size(95, 28); this.labelPIn2.TabIndex = 179; this.labelPIn2.Text = "[NG]"; this.labelPIn2.TextHAlign = SmartX.SmartLabel.TextHorAlign.Left; @@ -428,7 +428,7 @@ this.labelPIn3.LineSpacing = 0F; this.labelPIn3.Location = new System.Drawing.Point(15, 87); this.labelPIn3.Name = "labelPIn3"; - this.labelPIn3.Size = new System.Drawing.Size(110, 28); + this.labelPIn3.Size = new System.Drawing.Size(95, 28); this.labelPIn3.TabIndex = 178; this.labelPIn3.Text = "[STOP]"; this.labelPIn3.TextHAlign = SmartX.SmartLabel.TextHorAlign.Left; @@ -447,7 +447,7 @@ this.labelPIn4.LineSpacing = 0F; this.labelPIn4.Location = new System.Drawing.Point(15, 121); this.labelPIn4.Name = "labelPIn4"; - this.labelPIn4.Size = new System.Drawing.Size(110, 28); + this.labelPIn4.Size = new System.Drawing.Size(95, 28); this.labelPIn4.TabIndex = 177; this.labelPIn4.Text = "[START]"; this.labelPIn4.TextHAlign = SmartX.SmartLabel.TextHorAlign.Left; @@ -466,7 +466,7 @@ this.labelPIn5.LineSpacing = 0F; this.labelPIn5.Location = new System.Drawing.Point(15, 155); this.labelPIn5.Name = "labelPIn5"; - this.labelPIn5.Size = new System.Drawing.Size(110, 28); + this.labelPIn5.Size = new System.Drawing.Size(95, 28); this.labelPIn5.TabIndex = 173; this.labelPIn5.Text = "[IN_OPT1]"; this.labelPIn5.TextHAlign = SmartX.SmartLabel.TextHorAlign.Left; @@ -485,7 +485,7 @@ this.labelPIn6.LineSpacing = 0F; this.labelPIn6.Location = new System.Drawing.Point(15, 189); this.labelPIn6.Name = "labelPIn6"; - this.labelPIn6.Size = new System.Drawing.Size(110, 28); + this.labelPIn6.Size = new System.Drawing.Size(95, 28); this.labelPIn6.TabIndex = 176; this.labelPIn6.Text = "[IN_OPT2]"; this.labelPIn6.TextHAlign = SmartX.SmartLabel.TextHorAlign.Left; diff --git a/ITC81DB_0H/Controls/CenterEquipment/ControlCenterEquipFunctionSetting.cs b/ITC81DB_0H/Controls/CenterEquipment/ControlCenterEquipFunctionSetting.cs index cd8aabd..8cc2973 100644 --- a/ITC81DB_0H/Controls/CenterEquipment/ControlCenterEquipFunctionSetting.cs +++ b/ITC81DB_0H/Controls/CenterEquipment/ControlCenterEquipFunctionSetting.cs @@ -79,6 +79,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN6.Items.Add("START"); this.comboBoxPIN6.Items.Add("STOP"); this.comboBoxPIN6.Items.Add("Air Check"); + this.comboBoxPIN6.Items.Add("Metal Detector Entry Sensor"); + this.comboBoxPIN6.Items.Add("Metal Detector"); this.comboBoxPIN6.SelectedIndexChanged += new EventHandler(this.comboBoxPIN6_SelectedIndexChanged); this.comboBoxPIN5.SelectedIndexChanged -= new EventHandler(this.comboBoxPIN5_SelectedIndexChanged); @@ -88,6 +90,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN5.Items.Add("START"); this.comboBoxPIN5.Items.Add("STOP"); this.comboBoxPIN5.Items.Add("Air Check"); + this.comboBoxPIN5.Items.Add("Metal Detector Entry Sensor"); + this.comboBoxPIN5.Items.Add("Metal Detector"); this.comboBoxPIN5.SelectedIndexChanged += new EventHandler(this.comboBoxPIN5_SelectedIndexChanged); this.comboBoxPIN4.SelectedIndexChanged -= new EventHandler(this.comboBoxPIN4_SelectedIndexChanged); @@ -97,6 +101,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN4.Items.Add("START"); this.comboBoxPIN4.Items.Add("STOP"); this.comboBoxPIN4.Items.Add("Air Check"); + this.comboBoxPIN4.Items.Add("Metal Detector Entry Sensor"); + this.comboBoxPIN4.Items.Add("Metal Detector"); this.comboBoxPIN4.SelectedIndexChanged += new EventHandler(this.comboBoxPIN4_SelectedIndexChanged); this.comboBoxPIN3.SelectedIndexChanged -= new EventHandler(this.comboBoxPIN3_SelectedIndexChanged); @@ -106,6 +112,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN3.Items.Add("START"); this.comboBoxPIN3.Items.Add("STOP"); this.comboBoxPIN3.Items.Add("Air Check"); + this.comboBoxPIN3.Items.Add("Metal Detector Entry Sensor"); + this.comboBoxPIN3.Items.Add("Metal Detector"); this.comboBoxPIN3.SelectedIndexChanged += new EventHandler(this.comboBoxPIN3_SelectedIndexChanged); this.comboBoxPIN2.SelectedIndexChanged -= new EventHandler(this.comboBoxPIN2_SelectedIndexChanged); @@ -115,6 +123,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN2.Items.Add("START"); this.comboBoxPIN2.Items.Add("STOP"); this.comboBoxPIN2.Items.Add("Air Check"); + this.comboBoxPIN2.Items.Add("Metal Detector Entry Sensor"); + this.comboBoxPIN2.Items.Add("Metal Detector"); this.comboBoxPIN2.SelectedIndexChanged += new EventHandler(this.comboBoxPIN2_SelectedIndexChanged); this.buttonLogin.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.engON)); @@ -151,6 +161,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN6.Items.Add("开启"); this.comboBoxPIN6.Items.Add("停止"); this.comboBoxPIN6.Items.Add("气压确认"); + this.comboBoxPIN6.Items.Add("金属检出进入传感器"); + this.comboBoxPIN6.Items.Add("金属检出"); this.comboBoxPIN6.SelectedIndexChanged += new EventHandler(this.comboBoxPIN6_SelectedIndexChanged); this.comboBoxPIN5.SelectedIndexChanged -= new EventHandler(this.comboBoxPIN5_SelectedIndexChanged); @@ -160,6 +172,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN5.Items.Add("开启"); this.comboBoxPIN5.Items.Add("停止"); this.comboBoxPIN5.Items.Add("气压确认"); + this.comboBoxPIN5.Items.Add("金属检出进入传感器"); + this.comboBoxPIN5.Items.Add("金属检出"); this.comboBoxPIN5.SelectedIndexChanged += new EventHandler(this.comboBoxPIN5_SelectedIndexChanged); this.comboBoxPIN4.SelectedIndexChanged -= new EventHandler(this.comboBoxPIN4_SelectedIndexChanged); @@ -169,6 +183,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN4.Items.Add("开启"); this.comboBoxPIN4.Items.Add("停止"); this.comboBoxPIN4.Items.Add("气压确认"); + this.comboBoxPIN4.Items.Add("金属检出进入传感器"); + this.comboBoxPIN4.Items.Add("金属检出"); this.comboBoxPIN4.SelectedIndexChanged += new EventHandler(this.comboBoxPIN4_SelectedIndexChanged); this.comboBoxPIN3.SelectedIndexChanged -= new EventHandler(this.comboBoxPIN3_SelectedIndexChanged); @@ -178,6 +194,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN3.Items.Add("开启"); this.comboBoxPIN3.Items.Add("停止"); this.comboBoxPIN3.Items.Add("气压确认"); + this.comboBoxPIN3.Items.Add("金属检出进入传感器"); + this.comboBoxPIN3.Items.Add("金属检出"); this.comboBoxPIN3.SelectedIndexChanged += new EventHandler(this.comboBoxPIN3_SelectedIndexChanged); this.comboBoxPIN2.SelectedIndexChanged -= new EventHandler(this.comboBoxPIN2_SelectedIndexChanged); @@ -187,6 +205,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN2.Items.Add("开启"); this.comboBoxPIN2.Items.Add("停止"); this.comboBoxPIN2.Items.Add("气压确认"); + this.comboBoxPIN2.Items.Add("金属检出进入传感器"); + this.comboBoxPIN2.Items.Add("金属检出"); this.comboBoxPIN2.SelectedIndexChanged += new EventHandler(this.comboBoxPIN2_SelectedIndexChanged); this.buttonLogin.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.chnON)); @@ -301,6 +321,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN6.Items.Add("START"); this.comboBoxPIN6.Items.Add("STOPP"); this.comboBoxPIN6.Items.Add("Luft Prüfen"); + this.comboBoxPIN6.Items.Add("Metallerkennungs-Eingangssensor"); + this.comboBoxPIN6.Items.Add("Metalldetektion"); this.comboBoxPIN6.SelectedIndexChanged += new EventHandler(this.comboBoxPIN6_SelectedIndexChanged); this.comboBoxPIN5.SelectedIndexChanged -= new EventHandler(this.comboBoxPIN5_SelectedIndexChanged); @@ -310,6 +332,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN5.Items.Add("START"); this.comboBoxPIN5.Items.Add("STOPP"); this.comboBoxPIN5.Items.Add("Luft Prüfen"); + this.comboBoxPIN5.Items.Add("Metallerkennungs-Eingangssensor"); + this.comboBoxPIN5.Items.Add("Metalldetektion"); this.comboBoxPIN5.SelectedIndexChanged += new EventHandler(this.comboBoxPIN5_SelectedIndexChanged); this.comboBoxPIN4.SelectedIndexChanged -= new EventHandler(this.comboBoxPIN4_SelectedIndexChanged); @@ -319,6 +343,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN4.Items.Add("START"); this.comboBoxPIN4.Items.Add("STOPP"); this.comboBoxPIN4.Items.Add("Luft Prüfen"); + this.comboBoxPIN4.Items.Add("Metallerkennungs-Eingangssensor"); + this.comboBoxPIN4.Items.Add("Metalldetektion"); this.comboBoxPIN4.SelectedIndexChanged += new EventHandler(this.comboBoxPIN4_SelectedIndexChanged); this.comboBoxPIN3.SelectedIndexChanged -= new EventHandler(this.comboBoxPIN3_SelectedIndexChanged); @@ -328,6 +354,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN3.Items.Add("START"); this.comboBoxPIN3.Items.Add("STOPP"); this.comboBoxPIN3.Items.Add("Luft Prüfen"); + this.comboBoxPIN3.Items.Add("Metallerkennungs-Eingangssensor"); + this.comboBoxPIN3.Items.Add("Metalldetektion"); this.comboBoxPIN3.SelectedIndexChanged += new EventHandler(this.comboBoxPIN3_SelectedIndexChanged); this.comboBoxPIN2.SelectedIndexChanged -= new EventHandler(this.comboBoxPIN2_SelectedIndexChanged); @@ -337,6 +365,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN2.Items.Add("START"); this.comboBoxPIN2.Items.Add("STOPP"); this.comboBoxPIN2.Items.Add("Luft Prüfen"); + this.comboBoxPIN2.Items.Add("Metallerkennungs-Eingangssensor"); + this.comboBoxPIN2.Items.Add("Metalldetektion"); this.comboBoxPIN2.SelectedIndexChanged += new EventHandler(this.comboBoxPIN2_SelectedIndexChanged); this.buttonLogin.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.gerON)); @@ -373,6 +403,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN6.Items.Add("START"); this.comboBoxPIN6.Items.Add("STOP"); this.comboBoxPIN6.Items.Add("공압확인"); + this.comboBoxPIN6.Items.Add("금속검출 진입센서"); + this.comboBoxPIN6.Items.Add("금속검출"); this.comboBoxPIN6.SelectedIndexChanged += new EventHandler(this.comboBoxPIN6_SelectedIndexChanged); this.comboBoxPIN5.SelectedIndexChanged -= new EventHandler(this.comboBoxPIN5_SelectedIndexChanged); @@ -382,6 +414,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN5.Items.Add("START"); this.comboBoxPIN5.Items.Add("STOP"); this.comboBoxPIN5.Items.Add("공압확인"); + this.comboBoxPIN5.Items.Add("금속검출 진입센서"); + this.comboBoxPIN5.Items.Add("금속검출"); this.comboBoxPIN5.SelectedIndexChanged += new EventHandler(this.comboBoxPIN5_SelectedIndexChanged); this.comboBoxPIN4.SelectedIndexChanged -= new EventHandler(this.comboBoxPIN4_SelectedIndexChanged); @@ -391,6 +425,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN4.Items.Add("START"); this.comboBoxPIN4.Items.Add("STOP"); this.comboBoxPIN4.Items.Add("공압확인"); + this.comboBoxPIN4.Items.Add("금속검출 진입센서"); + this.comboBoxPIN4.Items.Add("금속검출"); this.comboBoxPIN4.SelectedIndexChanged += new EventHandler(this.comboBoxPIN4_SelectedIndexChanged); this.comboBoxPIN3.SelectedIndexChanged -= new EventHandler(this.comboBoxPIN3_SelectedIndexChanged); @@ -400,6 +436,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN3.Items.Add("START"); this.comboBoxPIN3.Items.Add("STOP"); this.comboBoxPIN3.Items.Add("공압확인"); + this.comboBoxPIN3.Items.Add("금속검출 진입센서"); + this.comboBoxPIN3.Items.Add("금속검출"); this.comboBoxPIN3.SelectedIndexChanged += new EventHandler(this.comboBoxPIN3_SelectedIndexChanged); this.comboBoxPIN2.SelectedIndexChanged -= new EventHandler(this.comboBoxPIN2_SelectedIndexChanged); @@ -409,6 +447,8 @@ namespace ITC81DB_0H.Controls this.comboBoxPIN2.Items.Add("START"); this.comboBoxPIN2.Items.Add("STOP"); this.comboBoxPIN2.Items.Add("공압확인"); + this.comboBoxPIN2.Items.Add("금속검출 진입센서"); + this.comboBoxPIN2.Items.Add("금속검출"); this.comboBoxPIN2.SelectedIndexChanged += new EventHandler(this.comboBoxPIN2_SelectedIndexChanged); this.buttonLogin.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.engON)); @@ -690,6 +730,7 @@ namespace ITC81DB_0H.Controls this.ParentForm.ParentForm.ChildFormMainDisplay.MainDisplayWeightBigScreen.InitializeDesign(); this.ParentForm.ParentForm.ChildFormMainDisplay.MainDisplayWeightSmall.InitializeDesign(); this.ParentForm.ParentForm.ChildFormMainDisplay.MainDisplayFeedback.InitializeDesign(); + this.ParentForm.ParentForm.ChildFormMainDisplay.MainDisplayModbus.InitializeDesign(); Thread.Sleep(50); this.ParentForm.ParentForm.ChildFormMenu.CenterBasicDataBackup.InitializeDesign(); @@ -706,10 +747,12 @@ namespace ITC81DB_0H.Controls this.ParentForm.ParentForm.ChildFormMenu.CenterConfiOptionBoard.InitializeDesign(); this.ParentForm.ParentForm.ChildFormMenu.CenterConfiSerial.InitializeDesign(); this.ParentForm.ParentForm.ChildFormMenu.CenterConfiEthernet.ControlEthernetLocalIP.InitializeDesign(); + this.ParentForm.ParentForm.ChildFormMenu.CenterConfiEthernet.ControlModbusTCP.InitializeDesign(); this.ParentForm.ParentForm.ChildFormMenu.CenterConfiSerial.ControlBarcode.InitializeDesign(); this.ParentForm.ParentForm.ChildFormMenu.CenterConfiSerial.ControlHitachi.InitializeDesign(); this.ParentForm.ParentForm.ChildFormMenu.CenterConfiSerial.ControlMarkoprint.InitializeDesign(); this.ParentForm.ParentForm.ChildFormMenu.CenterConfiSerial.ControlUserDefine.InitializeDesign(); + this.ParentForm.ParentForm.ChildFormMenu.CenterConfiSerial.ControlModbusRTU.InitializeDesign(); Thread.Sleep(50); this.ParentForm.ParentForm.ChildFormMenu.CenterEquipFunctionSetting.InitializeDesign(); diff --git a/ITC81DB_0H/Controls/CenterInformation/ControlCenterInforSystem.cs b/ITC81DB_0H/Controls/CenterInformation/ControlCenterInforSystem.cs index d0a2db9..1b31c83 100644 --- a/ITC81DB_0H/Controls/CenterInformation/ControlCenterInforSystem.cs +++ b/ITC81DB_0H/Controls/CenterInformation/ControlCenterInforSystem.cs @@ -66,7 +66,7 @@ namespace ITC81DB_0H.Controls private void DefaultSetting() { this.labelSerialNo.Text = this.ParentForm.ParentForm.SystemConfig1.SerialNumber; - this.labelDisplayVer.Text = "2.0.0"; + this.labelDisplayVer.Text = "2.1.0"; } public void UpdateMainBoardVersionDisplay(string version) diff --git a/ITC81DB_0H/Controls/CenterInformation/ControlCenterInforSystem2.cs b/ITC81DB_0H/Controls/CenterInformation/ControlCenterInforSystem2.cs index e7c93cd..f0e7420 100644 --- a/ITC81DB_0H/Controls/CenterInformation/ControlCenterInforSystem2.cs +++ b/ITC81DB_0H/Controls/CenterInformation/ControlCenterInforSystem2.cs @@ -752,7 +752,7 @@ namespace ITC81DB_0H this.ParentForm.ParentForm.CurrentSystemStatus.CurrentDisplay = DataStore.DisplayStore.InforSystem2; this.ParentForm.ParentForm.SetDisplayMode(DataStore.DisplayMode.Menu); - this.ParentForm.ParentForm.TransferDataStream(CommunicationCommand.Read, CommunicationID.MainBoard, CommunicationAddress.ParameterRead3901, ""); + //this.ParentForm.ParentForm.TransferDataStream(CommunicationCommand.Read, CommunicationID.MainBoard, CommunicationAddress.ParameterRead3901, ""); this.InitialLabel(); } #endregion diff --git a/ITC81DB_0H/Controls/CenterSystem/ControlCenterSystemAutoZero.cs b/ITC81DB_0H/Controls/CenterSystem/ControlCenterSystemAutoZero.cs index d6d62fc..a9e0731 100644 --- a/ITC81DB_0H/Controls/CenterSystem/ControlCenterSystemAutoZero.cs +++ b/ITC81DB_0H/Controls/CenterSystem/ControlCenterSystemAutoZero.cs @@ -81,69 +81,29 @@ namespace ITC81DB_0H.Controls this.comboBoxVariate.SelectedIndexChanged += new EventHandler(this.comboBoxVariate_SelectedIndexChanged); } - private void ControlEnableMode1(bool time, bool range, bool variate) - { - if (time == true) - { - if (this.labelPlusRange.ForeColor != Color.White) - this.labelPlusRange.ForeColor = Color.White; - } - else - { - if (this.labelPlusRange.ForeColor != Color.DarkGray) - this.labelPlusRange.ForeColor = Color.DarkGray; - } - - if (range == true) - { - if (this.labelMinusRange.ForeColor != Color.White) - this.labelMinusRange.ForeColor = Color.White; - } - else - { - if (this.labelMinusRange.ForeColor != Color.DarkGray) - this.labelMinusRange.ForeColor = Color.DarkGray; - } - - if (this.labelPlusRange.Enabled != time) - this.labelPlusRange.Enabled = time; - - if (this.labelMinusRange.Enabled != range) - this.labelMinusRange.Enabled = range; - - if (this.comboBoxVariate.Enabled != variate) - this.comboBoxVariate.Enabled = variate; - } - - private void UpdateZeroParameterDisplay(SystemParameter4 item) + public void UpdateZeroParameterDisplay(SystemParameter4 item) { int iValue = 0; string value = ""; - // Mode 1 - iValue = int.Parse(item.MainAutoZeroMinusRange.Trim()); - if (iValue == 4) - { - this.ControlEnableMode1(true, true, true); - } + // On/Off + if (item.MainAutoZeroIsAutoZeroUsing == false) + this.buttonIsAutoZeroUsing.ButtonUp(); else - { - this.ControlEnableMode1(false, false, false); - } + this.buttonIsAutoZeroUsing.ButtonDown(); - // Mode1 Time - value = item.MainAutoZeroPlusRange.Trim(); + // + Range + value =Helper.StringToDecimalPlaces(item.MainAutoZeroPlusRange, this.ParentForm.ParentForm.SystemConfig1.DecimalPlaces); if (this.labelPlusRange.Text != value) this.labelPlusRange.Text = value; - // Mode1 Range - if (item.MainAutoZeroIsAutoZeroUsing == true) - this.buttonIsAutoZeroUsing.ButtonDown(); - else - this.buttonIsAutoZeroUsing.ButtonUp(); + // - Range + value = Helper.StringToDecimalPlaces(item.MainAutoZeroMinusRange, this.ParentForm.ParentForm.SystemConfig1.DecimalPlaces); + if (this.labelMinusRange.Text != value) + this.labelMinusRange.Text = value; - // Mode1 Variate - iValue = int.Parse(item.MainAutoZeroVariate.Trim()); + // Variate + iValue = int.Parse(item.MainAutoZeroVariate); this.comboBoxVariate.SelectedIndexChanged -= new EventHandler(this.comboBoxVariate_SelectedIndexChanged); this.comboBoxVariate.SelectedIndex = iValue; this.comboBoxVariate.SelectedIndexChanged += new EventHandler(this.comboBoxVariate_SelectedIndexChanged); @@ -156,8 +116,7 @@ namespace ITC81DB_0H.Controls this.ParentForm.DisplayTitleRoot(this.ParentForm.ParentForm.CurrentSystemStatus); //this.UpdateZeroParameterDisplay(this.ParentForm.ParentForm.CurrentSystemParameter4); - this.ParentForm.ParentForm.TransferDataStream(CommunicationCommand.Read, CommunicationID.MainBoard, CommunicationAddress.ParameterRead4901, ""); - this.ParentForm.ParentForm.TransferDataStream(CommunicationCommand.Read, CommunicationID.MainBoard, CommunicationAddress.ParameterRead4902, ""); + this.ParentForm.ParentForm.TransferDataStream(CommunicationCommand.Read, CommunicationID.MainBoard, CommunicationAddress.ParameterRead4907, ""); } #endregion diff --git a/ITC81DB_0H/Controls/CenterSystem/ControlCenterSystemCalibration.Designer.cs b/ITC81DB_0H/Controls/CenterSystem/ControlCenterSystemCalibration.Designer.cs index 5f6c2e0..2ad4846 100644 --- a/ITC81DB_0H/Controls/CenterSystem/ControlCenterSystemCalibration.Designer.cs +++ b/ITC81DB_0H/Controls/CenterSystem/ControlCenterSystemCalibration.Designer.cs @@ -30,6 +30,8 @@ { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ControlCenterSystemCalibration)); this.smartGroupBox1 = new SmartX.SmartGroupBox(); + this.smartLabel2 = new SmartX.SmartLabel(); + this.labelBalanceWeight = new SmartX.SmartLabel(); this.buttonBalance = new SmartX.SmartButton(); this.panel1 = new System.Windows.Forms.Panel(); this.radioButtonDecimalPlaces2 = new SmartX.SmartRadioButton(); @@ -43,8 +45,6 @@ this.labelWeight = new SmartX.SmartLabel(); this.buttonStart = new SmartX.SmartButton(); this.pictureBoxStep1 = new System.Windows.Forms.PictureBox(); - this.labelBalanceWeight = new SmartX.SmartLabel(); - this.smartLabel2 = new SmartX.SmartLabel(); this.smartGroupBox1.SuspendLayout(); this.panel1.SuspendLayout(); this.SuspendLayout(); @@ -80,6 +80,47 @@ this.smartGroupBox1.TabIndex = 176; this.smartGroupBox1.TextColor = System.Drawing.Color.Black; // + // smartLabel2 + // + this.smartLabel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(212)))), ((int)(((byte)(212)))), ((int)(((byte)(212))))); + this.smartLabel2.BackPictureBox1 = null; + this.smartLabel2.BackPictureBox2 = this.smartGroupBox1; + this.smartLabel2.BorderColor = System.Drawing.Color.Black; + this.smartLabel2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.smartLabel2.Font = new System.Drawing.Font("Arial", 20F, System.Drawing.FontStyle.Bold); + this.smartLabel2.ForeColor = System.Drawing.Color.White; + this.smartLabel2.InitVisible = true; + this.smartLabel2.LineSpacing = 0F; + this.smartLabel2.Location = new System.Drawing.Point(552, 290); + this.smartLabel2.Name = "smartLabel2"; + this.smartLabel2.Size = new System.Drawing.Size(27, 40); + this.smartLabel2.TabIndex = 496; + this.smartLabel2.Text = "g"; + this.smartLabel2.TextHAlign = SmartX.SmartLabel.TextHorAlign.Right; + this.smartLabel2.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.smartLabel2.Wordwrap = false; + // + // labelBalanceWeight + // + this.labelBalanceWeight.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(212)))), ((int)(((byte)(212)))), ((int)(((byte)(212))))); + this.labelBalanceWeight.BackPictureBox1 = null; + this.labelBalanceWeight.BackPictureBox2 = this.smartGroupBox1; + this.labelBalanceWeight.BorderColor = System.Drawing.Color.Black; + this.labelBalanceWeight.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelBalanceWeight.Font = new System.Drawing.Font("Arial", 20F, System.Drawing.FontStyle.Bold); + this.labelBalanceWeight.ForeColor = System.Drawing.Color.White; + this.labelBalanceWeight.InitVisible = true; + this.labelBalanceWeight.LineSpacing = 0F; + this.labelBalanceWeight.Location = new System.Drawing.Point(449, 288); + this.labelBalanceWeight.Name = "labelBalanceWeight"; + this.labelBalanceWeight.Size = new System.Drawing.Size(101, 40); + this.labelBalanceWeight.TabIndex = 495; + this.labelBalanceWeight.Text = "123"; + this.labelBalanceWeight.TextHAlign = SmartX.SmartLabel.TextHorAlign.Right; + this.labelBalanceWeight.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelBalanceWeight.Wordwrap = false; + this.labelBalanceWeight.Click += new System.EventHandler(this.labelBalanceWeight_Click); + // // buttonBalance // this.buttonBalance.BackPictureBox = null; @@ -118,7 +159,7 @@ this.panel1.BackColor = System.Drawing.Color.Black; this.panel1.Controls.Add(this.radioButtonDecimalPlaces2); this.panel1.Controls.Add(this.radioButtonDecimalPlaces1); - this.panel1.Location = new System.Drawing.Point(143, 288); + this.panel1.Location = new System.Drawing.Point(135, 288); this.panel1.Name = "panel1"; this.panel1.Size = new System.Drawing.Size(196, 40); // @@ -366,47 +407,6 @@ this.pictureBoxStep1.Name = "pictureBoxStep1"; this.pictureBoxStep1.Size = new System.Drawing.Size(330, 194); // - // labelBalanceWeight - // - this.labelBalanceWeight.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(212)))), ((int)(((byte)(212)))), ((int)(((byte)(212))))); - this.labelBalanceWeight.BackPictureBox1 = null; - this.labelBalanceWeight.BackPictureBox2 = this.smartGroupBox1; - this.labelBalanceWeight.BorderColor = System.Drawing.Color.Black; - this.labelBalanceWeight.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.labelBalanceWeight.Font = new System.Drawing.Font("Arial", 20F, System.Drawing.FontStyle.Bold); - this.labelBalanceWeight.ForeColor = System.Drawing.Color.White; - this.labelBalanceWeight.InitVisible = true; - this.labelBalanceWeight.LineSpacing = 0F; - this.labelBalanceWeight.Location = new System.Drawing.Point(455, 288); - this.labelBalanceWeight.Name = "labelBalanceWeight"; - this.labelBalanceWeight.Size = new System.Drawing.Size(101, 40); - this.labelBalanceWeight.TabIndex = 495; - this.labelBalanceWeight.Text = "123"; - this.labelBalanceWeight.TextHAlign = SmartX.SmartLabel.TextHorAlign.Right; - this.labelBalanceWeight.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; - this.labelBalanceWeight.Wordwrap = false; - this.labelBalanceWeight.Click += new System.EventHandler(this.labelBalanceWeight_Click); - // - // smartLabel2 - // - this.smartLabel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(212)))), ((int)(((byte)(212)))), ((int)(((byte)(212))))); - this.smartLabel2.BackPictureBox1 = null; - this.smartLabel2.BackPictureBox2 = this.smartGroupBox1; - this.smartLabel2.BorderColor = System.Drawing.Color.Black; - this.smartLabel2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.smartLabel2.Font = new System.Drawing.Font("Arial", 20F, System.Drawing.FontStyle.Bold); - this.smartLabel2.ForeColor = System.Drawing.Color.White; - this.smartLabel2.InitVisible = true; - this.smartLabel2.LineSpacing = 0F; - this.smartLabel2.Location = new System.Drawing.Point(557, 290); - this.smartLabel2.Name = "smartLabel2"; - this.smartLabel2.Size = new System.Drawing.Size(27, 40); - this.smartLabel2.TabIndex = 496; - this.smartLabel2.Text = "g"; - this.smartLabel2.TextHAlign = SmartX.SmartLabel.TextHorAlign.Right; - this.smartLabel2.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; - this.smartLabel2.Wordwrap = false; - // // ControlCenterSystemCalibration // this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); diff --git a/ITC81DB_0H/Controls/Etc/ControlConfiModbus.cs b/ITC81DB_0H/Controls/Etc/ControlConfiModbus.cs new file mode 100644 index 0000000..203d6cf --- /dev/null +++ b/ITC81DB_0H/Controls/Etc/ControlConfiModbus.cs @@ -0,0 +1,353 @@ +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_0H.Forms; +using ITC81DB_2H_ImageDll; +using ITC81DB_0H.DialogForms; + +namespace ITC81DB_0H.Controls +{ + 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 + { + 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.ModbusRTUSlaveIDCOM1 = 1; + else if (this.ParentForm.CurrentConfigurationMenu() == DataStore.MenuBottomConfiguration.SerialCOM3) + this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSlaveIDCOM3 = 1; + else if (this.ParentForm.CurrentConfigurationMenu() == DataStore.MenuBottomConfiguration.SerialCOM4) + this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSlaveIDCOM4 = 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.ModbusRTUSlaveIDCOM1.ToString(); + this.labelStartAddress.Text = this.ParentForm.ParentForm.SystemConfig2.ModbusRTUStartAddressCOM1.ToString(); + } + else if (menu == DataStore.MenuBottomConfiguration.SerialCOM3) + { + this.labelSlaveID.Text = this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSlaveIDCOM3.ToString(); + this.labelStartAddress.Text = this.ParentForm.ParentForm.SystemConfig2.ModbusRTUStartAddressCOM3.ToString(); + } + else if (menu == DataStore.MenuBottomConfiguration.SerialCOM4) + { + this.labelSlaveID.Text = this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSlaveIDCOM4.ToString(); + this.labelStartAddress.Text = this.ParentForm.ParentForm.SystemConfig2.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.SystemConfig2.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.ModbusRTUSlaveIDCOM1 = myKeyPad.IntValue; + else if (this.ParentForm.CurrentConfigurationMenu() == DataStore.MenuBottomConfiguration.SerialCOM3) + this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSlaveIDCOM3 = myKeyPad.IntValue; + else if (this.ParentForm.CurrentConfigurationMenu() == DataStore.MenuBottomConfiguration.SerialCOM4) + this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSlaveIDCOM4 = 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.SystemConfig2.ModbusRTUStartAddressCOM1 = myKeyPad.IntValue; + else if (this.ParentForm.CurrentConfigurationMenu() == DataStore.MenuBottomConfiguration.SerialCOM3) + this.ParentForm.ParentForm.SystemConfig2.ModbusRTUStartAddressCOM3 = myKeyPad.IntValue; + else if (this.ParentForm.CurrentConfigurationMenu() == DataStore.MenuBottomConfiguration.SerialCOM4) + this.ParentForm.ParentForm.SystemConfig2.ModbusRTUStartAddressCOM4 = myKeyPad.IntValue; + else + this.ParentForm.ParentForm.SystemConfig2.ModbusTCPStartAddress = myKeyPad.IntValue; + + this.ParentForm.ParentForm.SaveSystemConfigurationFile2(this.ParentForm.ParentForm.SystemConfig2); + } + } + } + + 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 + } +} diff --git a/ITC81DB_0H/Controls/Etc/ControlConfiModbus.designer.cs b/ITC81DB_0H/Controls/Etc/ControlConfiModbus.designer.cs new file mode 100644 index 0000000..44358ad --- /dev/null +++ b/ITC81DB_0H/Controls/Etc/ControlConfiModbus.designer.cs @@ -0,0 +1,339 @@ +namespace ITC81DB_0H.Controls +{ + partial class ControlConfiModbus + { + /// + /// 필수 디자이너 변수입니다. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 사용 중인 모든 리소스를 정리합니다. + /// + /// 관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 구성 요소 디자이너에서 생성한 코드 + + /// + /// 디자이너 지원에 필요한 메서드입니다. + /// 이 메서드의 내용을 코드 편집기로 수정하지 마십시오. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ControlConfiModbus)); + this.smartGroupBox1 = new SmartX.SmartGroupBox(); + this.smartLabel2 = new SmartX.SmartLabel(); + this.labelFunctions = new SmartX.SmartLabel(); + this.labelStartAddress = new SmartX.SmartLabel(); + this.labelTitleStartAddress = new SmartX.SmartLabel(); + this.labelDiscription2 = new SmartX.SmartLabel(); + this.labelReadTimeout = new SmartX.SmartLabel(); + this.smartLabel6 = new SmartX.SmartLabel(); + this.comboBoxRole = new System.Windows.Forms.ComboBox(); + this.labelTitleFunctions = new SmartX.SmartLabel(); + this.labelDiscription1 = new SmartX.SmartLabel(); + this.labelSlaveID = new SmartX.SmartLabel(); + this.labelTitleSlaveID = new SmartX.SmartLabel(); + this.smartGroupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // smartGroupBox1 + // + this.smartGroupBox1.BackPictureBox = null; + this.smartGroupBox1.BackPictureBox1 = null; + this.smartGroupBox1.Controls.Add(this.smartLabel2); + this.smartGroupBox1.Controls.Add(this.labelFunctions); + this.smartGroupBox1.Controls.Add(this.labelStartAddress); + this.smartGroupBox1.Controls.Add(this.labelTitleStartAddress); + this.smartGroupBox1.Controls.Add(this.labelDiscription2); + this.smartGroupBox1.Controls.Add(this.labelReadTimeout); + this.smartGroupBox1.Controls.Add(this.smartLabel6); + this.smartGroupBox1.Controls.Add(this.comboBoxRole); + this.smartGroupBox1.Controls.Add(this.labelTitleFunctions); + this.smartGroupBox1.Controls.Add(this.labelDiscription1); + this.smartGroupBox1.Controls.Add(this.labelSlaveID); + this.smartGroupBox1.Controls.Add(this.labelTitleSlaveID); + this.smartGroupBox1.FrameLineColor1 = System.Drawing.Color.Black; + this.smartGroupBox1.FrameLineColor2 = System.Drawing.Color.Black; + this.smartGroupBox1.FrameLineThickness = 1; + this.smartGroupBox1.FrameStyle = SmartX.SmartGroupBox.FRAMESTYLES.None; + this.smartGroupBox1.Image = ((System.Drawing.Image)(resources.GetObject("smartGroupBox1.Image"))); + this.smartGroupBox1.InitVisible = true; + this.smartGroupBox1.Location = new System.Drawing.Point(0, 0); + this.smartGroupBox1.Name = "smartGroupBox1"; + this.smartGroupBox1.RoundRadius = 5; + this.smartGroupBox1.Size = new System.Drawing.Size(710, 253); + this.smartGroupBox1.TabIndex = 5; + this.smartGroupBox1.Text = "smartGroupBox1"; + this.smartGroupBox1.TextColor = System.Drawing.Color.Black; + // + // smartLabel2 + // + this.smartLabel2.BackPictureBox1 = null; + this.smartLabel2.BackPictureBox2 = this.smartGroupBox1; + this.smartLabel2.BorderColor = System.Drawing.Color.Black; + this.smartLabel2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.smartLabel2.Enabled = false; + this.smartLabel2.Font = new System.Drawing.Font("새굴림", 10F, System.Drawing.FontStyle.Bold); + this.smartLabel2.ForeColor = System.Drawing.Color.White; + this.smartLabel2.InitVisible = true; + this.smartLabel2.LineSpacing = 0F; + this.smartLabel2.Location = new System.Drawing.Point(134, 10); + this.smartLabel2.Name = "smartLabel2"; + this.smartLabel2.Size = new System.Drawing.Size(148, 28); + this.smartLabel2.TabIndex = 158; + this.smartLabel2.Text = "Role"; + this.smartLabel2.TextHAlign = SmartX.SmartLabel.TextHorAlign.Left; + this.smartLabel2.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.smartLabel2.Wordwrap = false; + // + // labelFunctions + // + this.labelFunctions.BackColor = System.Drawing.Color.Black; + this.labelFunctions.BackPictureBox = null; + this.labelFunctions.BackPictureBox1 = null; + this.labelFunctions.BackPictureBox2 = null; + this.labelFunctions.BorderColor = System.Drawing.Color.Black; + this.labelFunctions.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.labelFunctions.Font = new System.Drawing.Font("Arial", 13F, System.Drawing.FontStyle.Bold); + this.labelFunctions.ForeColor = System.Drawing.Color.White; + this.labelFunctions.InitVisible = true; + this.labelFunctions.LineSpacing = 0F; + this.labelFunctions.Location = new System.Drawing.Point(288, 44); + this.labelFunctions.Name = "labelFunctions"; + this.labelFunctions.Size = new System.Drawing.Size(358, 30); + this.labelFunctions.TabIndex = 157; + this.labelFunctions.Text = "04: Read input register"; + this.labelFunctions.TextHAlign = SmartX.SmartLabel.TextHorAlign.Left; + this.labelFunctions.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelFunctions.Wordwrap = false; + // + // labelStartAddress + // + this.labelStartAddress.BackColor = System.Drawing.SystemColors.Window; + this.labelStartAddress.BackPictureBox = null; + this.labelStartAddress.BackPictureBox1 = null; + this.labelStartAddress.BackPictureBox2 = null; + this.labelStartAddress.BorderColor = System.Drawing.Color.Black; + this.labelStartAddress.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.labelStartAddress.Font = new System.Drawing.Font("Arial", 15F, System.Drawing.FontStyle.Bold); + this.labelStartAddress.InitVisible = true; + this.labelStartAddress.LineSpacing = 0F; + this.labelStartAddress.Location = new System.Drawing.Point(288, 116); + this.labelStartAddress.Name = "labelStartAddress"; + this.labelStartAddress.Size = new System.Drawing.Size(90, 30); + this.labelStartAddress.TabIndex = 156; + this.labelStartAddress.Text = "1"; + this.labelStartAddress.TextHAlign = SmartX.SmartLabel.TextHorAlign.Right; + this.labelStartAddress.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelStartAddress.Wordwrap = false; + this.labelStartAddress.Click += new System.EventHandler(this.labelStartAddress_Click); + // + // labelTitleStartAddress + // + this.labelTitleStartAddress.BackPictureBox1 = null; + this.labelTitleStartAddress.BackPictureBox2 = this.smartGroupBox1; + this.labelTitleStartAddress.BorderColor = System.Drawing.Color.Black; + this.labelTitleStartAddress.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelTitleStartAddress.Enabled = false; + this.labelTitleStartAddress.Font = new System.Drawing.Font("새굴림", 10F, System.Drawing.FontStyle.Bold); + this.labelTitleStartAddress.ForeColor = System.Drawing.Color.White; + this.labelTitleStartAddress.InitVisible = true; + this.labelTitleStartAddress.LineSpacing = 0F; + this.labelTitleStartAddress.Location = new System.Drawing.Point(134, 116); + this.labelTitleStartAddress.Name = "labelTitleStartAddress"; + this.labelTitleStartAddress.Size = new System.Drawing.Size(148, 30); + this.labelTitleStartAddress.TabIndex = 155; + this.labelTitleStartAddress.Text = "Start Address"; + this.labelTitleStartAddress.TextHAlign = SmartX.SmartLabel.TextHorAlign.Left; + this.labelTitleStartAddress.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelTitleStartAddress.Wordwrap = false; + // + // labelDiscription2 + // + this.labelDiscription2.BackPictureBox1 = null; + this.labelDiscription2.BackPictureBox2 = this.smartGroupBox1; + this.labelDiscription2.BorderColor = System.Drawing.Color.Black; + this.labelDiscription2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelDiscription2.Font = new System.Drawing.Font("새굴림", 9F, System.Drawing.FontStyle.Bold); + this.labelDiscription2.ForeColor = System.Drawing.Color.White; + this.labelDiscription2.InitVisible = true; + this.labelDiscription2.LineSpacing = 0F; + this.labelDiscription2.Location = new System.Drawing.Point(118, 211); + this.labelDiscription2.Name = "labelDiscription2"; + this.labelDiscription2.Size = new System.Drawing.Size(561, 20); + this.labelDiscription2.TabIndex = 154; + this.labelDiscription2.Text = "- Master(Client) : 16(중량판정 시), Slave(Server) : 04(Master 읽기 요청 시)"; + this.labelDiscription2.TextHAlign = SmartX.SmartLabel.TextHorAlign.Left; + this.labelDiscription2.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelDiscription2.Wordwrap = false; + // + // labelReadTimeout + // + this.labelReadTimeout.BackColor = System.Drawing.SystemColors.Window; + this.labelReadTimeout.BackPictureBox = null; + this.labelReadTimeout.BackPictureBox1 = null; + this.labelReadTimeout.BackPictureBox2 = null; + this.labelReadTimeout.BorderColor = System.Drawing.Color.Black; + this.labelReadTimeout.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.labelReadTimeout.Font = new System.Drawing.Font("Arial", 15F, System.Drawing.FontStyle.Bold); + this.labelReadTimeout.InitVisible = true; + this.labelReadTimeout.LineSpacing = 0F; + this.labelReadTimeout.Location = new System.Drawing.Point(556, 80); + this.labelReadTimeout.Name = "labelReadTimeout"; + this.labelReadTimeout.Size = new System.Drawing.Size(90, 30); + this.labelReadTimeout.TabIndex = 153; + this.labelReadTimeout.Text = "1"; + this.labelReadTimeout.TextHAlign = SmartX.SmartLabel.TextHorAlign.Right; + this.labelReadTimeout.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelReadTimeout.Visible = false; + this.labelReadTimeout.Wordwrap = false; + this.labelReadTimeout.Click += new System.EventHandler(this.labelReadTimeout_Click); + // + // smartLabel6 + // + this.smartLabel6.BackPictureBox1 = null; + this.smartLabel6.BackPictureBox2 = this.smartGroupBox1; + this.smartLabel6.BorderColor = System.Drawing.Color.Black; + this.smartLabel6.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.smartLabel6.Enabled = false; + this.smartLabel6.Font = new System.Drawing.Font("새굴림", 10F, System.Drawing.FontStyle.Bold); + this.smartLabel6.ForeColor = System.Drawing.Color.White; + this.smartLabel6.InitVisible = true; + this.smartLabel6.LineSpacing = 0F; + this.smartLabel6.Location = new System.Drawing.Point(402, 80); + this.smartLabel6.Name = "smartLabel6"; + this.smartLabel6.Size = new System.Drawing.Size(148, 30); + this.smartLabel6.TabIndex = 152; + this.smartLabel6.Text = "Timeout"; + this.smartLabel6.TextHAlign = SmartX.SmartLabel.TextHorAlign.Left; + this.smartLabel6.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.smartLabel6.Visible = false; + this.smartLabel6.Wordwrap = false; + // + // comboBoxRole + // + this.comboBoxRole.Font = new System.Drawing.Font("새굴림", 14F, System.Drawing.FontStyle.Bold); + this.comboBoxRole.Location = new System.Drawing.Point(288, 10); + this.comboBoxRole.Name = "comboBoxRole"; + this.comboBoxRole.Size = new System.Drawing.Size(190, 28); + this.comboBoxRole.TabIndex = 151; + this.comboBoxRole.SelectedIndexChanged += new System.EventHandler(this.comboBoxRole_SelectedIndexChanged); + // + // labelTitleFunctions + // + this.labelTitleFunctions.BackPictureBox1 = null; + this.labelTitleFunctions.BackPictureBox2 = this.smartGroupBox1; + this.labelTitleFunctions.BorderColor = System.Drawing.Color.Black; + this.labelTitleFunctions.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelTitleFunctions.Enabled = false; + this.labelTitleFunctions.Font = new System.Drawing.Font("새굴림", 10F, System.Drawing.FontStyle.Bold); + this.labelTitleFunctions.ForeColor = System.Drawing.Color.White; + this.labelTitleFunctions.InitVisible = true; + this.labelTitleFunctions.LineSpacing = 0F; + this.labelTitleFunctions.Location = new System.Drawing.Point(134, 44); + this.labelTitleFunctions.Name = "labelTitleFunctions"; + this.labelTitleFunctions.Size = new System.Drawing.Size(148, 30); + this.labelTitleFunctions.TabIndex = 140; + this.labelTitleFunctions.Text = "Functions"; + this.labelTitleFunctions.TextHAlign = SmartX.SmartLabel.TextHorAlign.Left; + this.labelTitleFunctions.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelTitleFunctions.Wordwrap = false; + // + // labelDiscription1 + // + this.labelDiscription1.BackPictureBox1 = null; + this.labelDiscription1.BackPictureBox2 = this.smartGroupBox1; + this.labelDiscription1.BorderColor = System.Drawing.Color.Black; + this.labelDiscription1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelDiscription1.Font = new System.Drawing.Font("새굴림", 9F, System.Drawing.FontStyle.Bold); + this.labelDiscription1.ForeColor = System.Drawing.Color.White; + this.labelDiscription1.InitVisible = true; + this.labelDiscription1.LineSpacing = 0F; + this.labelDiscription1.Location = new System.Drawing.Point(118, 185); + this.labelDiscription1.Name = "labelDiscription1"; + this.labelDiscription1.Size = new System.Drawing.Size(561, 20); + this.labelDiscription1.TabIndex = 138; + this.labelDiscription1.Text = "- Parity Bit : None, Data Bits : 8, Stop Bits : 1"; + this.labelDiscription1.TextHAlign = SmartX.SmartLabel.TextHorAlign.Left; + this.labelDiscription1.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelDiscription1.Wordwrap = false; + // + // labelSlaveID + // + this.labelSlaveID.BackColor = System.Drawing.SystemColors.Window; + this.labelSlaveID.BackPictureBox = null; + this.labelSlaveID.BackPictureBox1 = null; + this.labelSlaveID.BackPictureBox2 = null; + this.labelSlaveID.BorderColor = System.Drawing.Color.Black; + this.labelSlaveID.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.labelSlaveID.Font = new System.Drawing.Font("Arial", 15F, System.Drawing.FontStyle.Bold); + this.labelSlaveID.InitVisible = true; + this.labelSlaveID.LineSpacing = 0F; + this.labelSlaveID.Location = new System.Drawing.Point(288, 80); + this.labelSlaveID.Name = "labelSlaveID"; + this.labelSlaveID.Size = new System.Drawing.Size(90, 30); + this.labelSlaveID.TabIndex = 136; + this.labelSlaveID.Text = "1"; + this.labelSlaveID.TextHAlign = SmartX.SmartLabel.TextHorAlign.Right; + this.labelSlaveID.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelSlaveID.Wordwrap = false; + this.labelSlaveID.Click += new System.EventHandler(this.labelSlaveID_Click); + // + // labelTitleSlaveID + // + this.labelTitleSlaveID.BackPictureBox1 = null; + this.labelTitleSlaveID.BackPictureBox2 = this.smartGroupBox1; + this.labelTitleSlaveID.BorderColor = System.Drawing.Color.Black; + this.labelTitleSlaveID.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelTitleSlaveID.Enabled = false; + this.labelTitleSlaveID.Font = new System.Drawing.Font("새굴림", 10F, System.Drawing.FontStyle.Bold); + this.labelTitleSlaveID.ForeColor = System.Drawing.Color.White; + this.labelTitleSlaveID.InitVisible = true; + this.labelTitleSlaveID.LineSpacing = 0F; + this.labelTitleSlaveID.Location = new System.Drawing.Point(134, 80); + this.labelTitleSlaveID.Name = "labelTitleSlaveID"; + this.labelTitleSlaveID.Size = new System.Drawing.Size(148, 30); + this.labelTitleSlaveID.TabIndex = 107; + this.labelTitleSlaveID.Text = "Slave ID"; + this.labelTitleSlaveID.TextHAlign = SmartX.SmartLabel.TextHorAlign.Left; + this.labelTitleSlaveID.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelTitleSlaveID.Wordwrap = false; + // + // ControlConfiModbus + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.Controls.Add(this.smartGroupBox1); + this.Name = "ControlConfiModbus"; + this.Size = new System.Drawing.Size(710, 253); + this.smartGroupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private SmartX.SmartGroupBox smartGroupBox1; + private SmartX.SmartLabel labelTitleSlaveID; + public SmartX.SmartLabel labelSlaveID; + private SmartX.SmartLabel labelDiscription1; + private SmartX.SmartLabel labelTitleFunctions; + private System.Windows.Forms.ComboBox comboBoxRole; + public SmartX.SmartLabel labelReadTimeout; + private SmartX.SmartLabel smartLabel6; + private SmartX.SmartLabel labelDiscription2; + public SmartX.SmartLabel labelStartAddress; + private SmartX.SmartLabel labelTitleStartAddress; + public SmartX.SmartLabel labelFunctions; + private SmartX.SmartLabel smartLabel2; + } +} diff --git a/ITC81DB_0H/Controls/Etc/ControlConfiModbus.resx b/ITC81DB_0H/Controls/Etc/ControlConfiModbus.resx new file mode 100644 index 0000000..7e32bd5 --- /dev/null +++ b/ITC81DB_0H/Controls/Etc/ControlConfiModbus.resx @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + + + + WEBPAD + + \ No newline at end of file diff --git a/ITC81DB_0H/Controls/Etc/ControlConfiOptionBoard1.cs b/ITC81DB_0H/Controls/Etc/ControlConfiOptionBoard1.cs index f44200a..73c75fa 100644 --- a/ITC81DB_0H/Controls/Etc/ControlConfiOptionBoard1.cs +++ b/ITC81DB_0H/Controls/Etc/ControlConfiOptionBoard1.cs @@ -299,7 +299,7 @@ namespace ITC81DB_0H.Controls value = Helper.StringZeroFillDigits4(this.labelSampleCount.Text); this.ParentForm.ParentForm.CurrentSystemParameter2.OPT1SamplingCount = myKeyPad.StringValue; - this.ParentForm.ParentForm.ChildFormMainDisplay.CurrentBottomMenuControlEnable(DataStore.EquipmentStatus.Stop); + this.ParentForm.ParentForm.ChildFormMainDisplay.CurrentBottomMenuControlEnable(); this.ParentForm.ParentForm.SaveSystemParameter2File(this.ParentForm.ParentForm.CurrentSystemParameter2); this.ParentForm.ParentForm.TransferDataStream(CommunicationCommand.Write, CommunicationID.MainBoard, CommunicationAddress.OPT1SamplingCount, value); diff --git a/ITC81DB_0H/Controls/MainDisplay/ControlMainDisplayMenu.cs b/ITC81DB_0H/Controls/MainDisplay/ControlMainDisplayMenu.cs index de2fba8..c0e1532 100644 --- a/ITC81DB_0H/Controls/MainDisplay/ControlMainDisplayMenu.cs +++ b/ITC81DB_0H/Controls/MainDisplay/ControlMainDisplayMenu.cs @@ -436,9 +436,8 @@ namespace ITC81DB_0H.Controls #endregion #region AutoZero - // Mode 1 //this.UpdateZero1ParameterDisplay(parameter); - this.ParentForm.ParentForm.TransferDataStream(CommunicationCommand.Read, CommunicationID.MainBoard, CommunicationAddress.ParameterRead4901, ""); + //this.ParentForm.ParentForm.TransferDataStream(CommunicationCommand.Read, CommunicationID.MainBoard, CommunicationAddress.ParameterRead4907, ""); #endregion } diff --git a/ITC81DB_0H/Controls/MainDisplay/ControlMainDisplayModbus.Designer.cs b/ITC81DB_0H/Controls/MainDisplay/ControlMainDisplayModbus.Designer.cs new file mode 100644 index 0000000..e2a3041 --- /dev/null +++ b/ITC81DB_0H/Controls/MainDisplay/ControlMainDisplayModbus.Designer.cs @@ -0,0 +1,969 @@ +namespace ITC81DB_0H.Controls +{ + partial class ControlMainDisplayModbus + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ControlMainDisplayModbus)); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.labelUpdateFlag = new SmartX.SmartLabel(); + this.labelEquipmentID = new SmartX.SmartLabel(); + this.labelUnder = new SmartX.SmartLabel(); + this.labelCurrentNo = new SmartX.SmartLabel(); + this.labelOver = new SmartX.SmartLabel(); + this.labelPass = new SmartX.SmartLabel(); + this.labelTare = new SmartX.SmartLabel(); + this.labelGrade = new SmartX.SmartLabel(); + this.labelTotalCount = new SmartX.SmartLabel(); + this.labelExNGCount = new SmartX.SmartLabel(); + this.labelNGCount = new SmartX.SmartLabel(); + this.labelOverCount = new SmartX.SmartLabel(); + this.labelPassCount = new SmartX.SmartLabel(); + this.labelUnderCount = new SmartX.SmartLabel(); + this.labelAlarmStatus = new SmartX.SmartLabel(); + this.labelOperationStatus = new SmartX.SmartLabel(); + this.labelWeight = new SmartX.SmartLabel(); + this.labelReceiveCount = new SmartX.SmartLabel(); + this.buttonBypassDirection = new SmartX.SmartButton(); + this.labelStartAddress = new SmartX.SmartLabel(); + this.labelOffset1 = new SmartX.SmartLabel(); + this.labelOffset2 = new SmartX.SmartLabel(); + this.labelOffset3 = new SmartX.SmartLabel(); + this.labelOffset4 = new SmartX.SmartLabel(); + this.labelOffset5 = new SmartX.SmartLabel(); + this.labelOffset6 = new SmartX.SmartLabel(); + this.labelOffset7 = new SmartX.SmartLabel(); + this.labelOffset8 = new SmartX.SmartLabel(); + this.labelOffset9 = new SmartX.SmartLabel(); + this.labelOffset10 = new SmartX.SmartLabel(); + this.labelOffset14 = new SmartX.SmartLabel(); + this.labelOffset13 = new SmartX.SmartLabel(); + this.labelOffset12 = new SmartX.SmartLabel(); + this.labelOffset11 = new SmartX.SmartLabel(); + this.labelOffset17 = new SmartX.SmartLabel(); + this.labelOffset16 = new SmartX.SmartLabel(); + this.labelOffset15 = new SmartX.SmartLabel(); + this.comboBoxPort = new System.Windows.Forms.ComboBox(); + this.SuspendLayout(); + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(0, 0); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(710, 320); + // + // labelUpdateFlag + // + this.labelUpdateFlag.BackColor = System.Drawing.Color.Black; + this.labelUpdateFlag.BackPictureBox = null; + this.labelUpdateFlag.BackPictureBox1 = null; + this.labelUpdateFlag.BackPictureBox2 = null; + this.labelUpdateFlag.BorderColor = System.Drawing.Color.Black; + this.labelUpdateFlag.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelUpdateFlag.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelUpdateFlag.ForeColor = System.Drawing.Color.White; + this.labelUpdateFlag.InitVisible = true; + this.labelUpdateFlag.LineSpacing = 0F; + this.labelUpdateFlag.Location = new System.Drawing.Point(167, 108); + this.labelUpdateFlag.Name = "labelUpdateFlag"; + this.labelUpdateFlag.Size = new System.Drawing.Size(73, 21); + this.labelUpdateFlag.TabIndex = 709; + this.labelUpdateFlag.Text = "999999999"; + this.labelUpdateFlag.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelUpdateFlag.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelUpdateFlag.Wordwrap = false; + // + // labelEquipmentID + // + this.labelEquipmentID.BackColor = System.Drawing.Color.Black; + this.labelEquipmentID.BackPictureBox = null; + this.labelEquipmentID.BackPictureBox1 = null; + this.labelEquipmentID.BackPictureBox2 = null; + this.labelEquipmentID.BorderColor = System.Drawing.Color.Black; + this.labelEquipmentID.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelEquipmentID.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelEquipmentID.ForeColor = System.Drawing.Color.White; + this.labelEquipmentID.InitVisible = true; + this.labelEquipmentID.LineSpacing = 0F; + this.labelEquipmentID.Location = new System.Drawing.Point(167, 134); + this.labelEquipmentID.Name = "labelEquipmentID"; + this.labelEquipmentID.Size = new System.Drawing.Size(73, 21); + this.labelEquipmentID.TabIndex = 710; + this.labelEquipmentID.Text = "999999999"; + this.labelEquipmentID.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelEquipmentID.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelEquipmentID.Wordwrap = false; + // + // labelUnder + // + this.labelUnder.BackColor = System.Drawing.Color.Black; + this.labelUnder.BackPictureBox = null; + this.labelUnder.BackPictureBox1 = null; + this.labelUnder.BackPictureBox2 = null; + this.labelUnder.BorderColor = System.Drawing.Color.Black; + this.labelUnder.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelUnder.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelUnder.ForeColor = System.Drawing.Color.White; + this.labelUnder.InitVisible = true; + this.labelUnder.LineSpacing = 0F; + this.labelUnder.Location = new System.Drawing.Point(167, 186); + this.labelUnder.Name = "labelUnder"; + this.labelUnder.Size = new System.Drawing.Size(73, 21); + this.labelUnder.TabIndex = 712; + this.labelUnder.Text = "999999999"; + this.labelUnder.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelUnder.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelUnder.Wordwrap = false; + // + // labelCurrentNo + // + this.labelCurrentNo.BackColor = System.Drawing.Color.Black; + this.labelCurrentNo.BackPictureBox = null; + this.labelCurrentNo.BackPictureBox1 = null; + this.labelCurrentNo.BackPictureBox2 = null; + this.labelCurrentNo.BorderColor = System.Drawing.Color.Black; + this.labelCurrentNo.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelCurrentNo.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelCurrentNo.ForeColor = System.Drawing.Color.White; + this.labelCurrentNo.InitVisible = true; + this.labelCurrentNo.LineSpacing = 0F; + this.labelCurrentNo.Location = new System.Drawing.Point(167, 160); + this.labelCurrentNo.Name = "labelCurrentNo"; + this.labelCurrentNo.Size = new System.Drawing.Size(73, 21); + this.labelCurrentNo.TabIndex = 711; + this.labelCurrentNo.Text = "999999999"; + this.labelCurrentNo.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelCurrentNo.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelCurrentNo.Wordwrap = false; + // + // labelOver + // + this.labelOver.BackColor = System.Drawing.Color.Black; + this.labelOver.BackPictureBox = null; + this.labelOver.BackPictureBox1 = null; + this.labelOver.BackPictureBox2 = null; + this.labelOver.BorderColor = System.Drawing.Color.Black; + this.labelOver.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOver.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOver.ForeColor = System.Drawing.Color.White; + this.labelOver.InitVisible = true; + this.labelOver.LineSpacing = 0F; + this.labelOver.Location = new System.Drawing.Point(167, 238); + this.labelOver.Name = "labelOver"; + this.labelOver.Size = new System.Drawing.Size(73, 21); + this.labelOver.TabIndex = 714; + this.labelOver.Text = "999999999"; + this.labelOver.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOver.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOver.Wordwrap = false; + // + // labelPass + // + this.labelPass.BackColor = System.Drawing.Color.Black; + this.labelPass.BackPictureBox = null; + this.labelPass.BackPictureBox1 = null; + this.labelPass.BackPictureBox2 = null; + this.labelPass.BorderColor = System.Drawing.Color.Black; + this.labelPass.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelPass.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelPass.ForeColor = System.Drawing.Color.White; + this.labelPass.InitVisible = true; + this.labelPass.LineSpacing = 0F; + this.labelPass.Location = new System.Drawing.Point(167, 212); + this.labelPass.Name = "labelPass"; + this.labelPass.Size = new System.Drawing.Size(73, 21); + this.labelPass.TabIndex = 713; + this.labelPass.Text = "999999999"; + this.labelPass.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelPass.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelPass.Wordwrap = false; + // + // labelTare + // + this.labelTare.BackColor = System.Drawing.Color.Black; + this.labelTare.BackPictureBox = null; + this.labelTare.BackPictureBox1 = null; + this.labelTare.BackPictureBox2 = null; + this.labelTare.BorderColor = System.Drawing.Color.Black; + this.labelTare.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelTare.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelTare.ForeColor = System.Drawing.Color.White; + this.labelTare.InitVisible = true; + this.labelTare.LineSpacing = 0F; + this.labelTare.Location = new System.Drawing.Point(167, 264); + this.labelTare.Name = "labelTare"; + this.labelTare.Size = new System.Drawing.Size(73, 21); + this.labelTare.TabIndex = 715; + this.labelTare.Text = "999999999"; + this.labelTare.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelTare.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelTare.Wordwrap = false; + // + // labelGrade + // + this.labelGrade.BackColor = System.Drawing.Color.Black; + this.labelGrade.BackPictureBox = null; + this.labelGrade.BackPictureBox1 = null; + this.labelGrade.BackPictureBox2 = null; + this.labelGrade.BorderColor = System.Drawing.Color.Black; + this.labelGrade.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelGrade.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelGrade.ForeColor = System.Drawing.Color.White; + this.labelGrade.InitVisible = true; + this.labelGrade.LineSpacing = 0F; + this.labelGrade.Location = new System.Drawing.Point(391, 264); + this.labelGrade.Name = "labelGrade"; + this.labelGrade.Size = new System.Drawing.Size(73, 21); + this.labelGrade.TabIndex = 722; + this.labelGrade.Text = "999999999"; + this.labelGrade.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelGrade.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelGrade.Wordwrap = false; + // + // labelTotalCount + // + this.labelTotalCount.BackColor = System.Drawing.Color.Black; + this.labelTotalCount.BackPictureBox = null; + this.labelTotalCount.BackPictureBox1 = null; + this.labelTotalCount.BackPictureBox2 = null; + this.labelTotalCount.BorderColor = System.Drawing.Color.Black; + this.labelTotalCount.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelTotalCount.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelTotalCount.ForeColor = System.Drawing.Color.White; + this.labelTotalCount.InitVisible = true; + this.labelTotalCount.LineSpacing = 0F; + this.labelTotalCount.Location = new System.Drawing.Point(391, 238); + this.labelTotalCount.Name = "labelTotalCount"; + this.labelTotalCount.Size = new System.Drawing.Size(73, 21); + this.labelTotalCount.TabIndex = 721; + this.labelTotalCount.Text = "999999999"; + this.labelTotalCount.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelTotalCount.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelTotalCount.Wordwrap = false; + // + // labelExNGCount + // + this.labelExNGCount.BackColor = System.Drawing.Color.Black; + this.labelExNGCount.BackPictureBox = null; + this.labelExNGCount.BackPictureBox1 = null; + this.labelExNGCount.BackPictureBox2 = null; + this.labelExNGCount.BorderColor = System.Drawing.Color.Black; + this.labelExNGCount.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelExNGCount.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelExNGCount.ForeColor = System.Drawing.Color.White; + this.labelExNGCount.InitVisible = true; + this.labelExNGCount.LineSpacing = 0F; + this.labelExNGCount.Location = new System.Drawing.Point(391, 212); + this.labelExNGCount.Name = "labelExNGCount"; + this.labelExNGCount.Size = new System.Drawing.Size(73, 21); + this.labelExNGCount.TabIndex = 720; + this.labelExNGCount.Text = "999999999"; + this.labelExNGCount.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelExNGCount.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelExNGCount.Wordwrap = false; + // + // labelNGCount + // + this.labelNGCount.BackColor = System.Drawing.Color.Black; + this.labelNGCount.BackPictureBox = null; + this.labelNGCount.BackPictureBox1 = null; + this.labelNGCount.BackPictureBox2 = null; + this.labelNGCount.BorderColor = System.Drawing.Color.Black; + this.labelNGCount.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelNGCount.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelNGCount.ForeColor = System.Drawing.Color.White; + this.labelNGCount.InitVisible = true; + this.labelNGCount.LineSpacing = 0F; + this.labelNGCount.Location = new System.Drawing.Point(391, 186); + this.labelNGCount.Name = "labelNGCount"; + this.labelNGCount.Size = new System.Drawing.Size(73, 21); + this.labelNGCount.TabIndex = 719; + this.labelNGCount.Text = "999999999"; + this.labelNGCount.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelNGCount.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelNGCount.Wordwrap = false; + // + // labelOverCount + // + this.labelOverCount.BackColor = System.Drawing.Color.Black; + this.labelOverCount.BackPictureBox = null; + this.labelOverCount.BackPictureBox1 = null; + this.labelOverCount.BackPictureBox2 = null; + this.labelOverCount.BorderColor = System.Drawing.Color.Black; + this.labelOverCount.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOverCount.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOverCount.ForeColor = System.Drawing.Color.White; + this.labelOverCount.InitVisible = true; + this.labelOverCount.LineSpacing = 0F; + this.labelOverCount.Location = new System.Drawing.Point(391, 160); + this.labelOverCount.Name = "labelOverCount"; + this.labelOverCount.Size = new System.Drawing.Size(73, 21); + this.labelOverCount.TabIndex = 718; + this.labelOverCount.Text = "999999999"; + this.labelOverCount.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOverCount.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOverCount.Wordwrap = false; + // + // labelPassCount + // + this.labelPassCount.BackColor = System.Drawing.Color.Black; + this.labelPassCount.BackPictureBox = null; + this.labelPassCount.BackPictureBox1 = null; + this.labelPassCount.BackPictureBox2 = null; + this.labelPassCount.BorderColor = System.Drawing.Color.Black; + this.labelPassCount.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelPassCount.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelPassCount.ForeColor = System.Drawing.Color.White; + this.labelPassCount.InitVisible = true; + this.labelPassCount.LineSpacing = 0F; + this.labelPassCount.Location = new System.Drawing.Point(391, 134); + this.labelPassCount.Name = "labelPassCount"; + this.labelPassCount.Size = new System.Drawing.Size(73, 21); + this.labelPassCount.TabIndex = 717; + this.labelPassCount.Text = "999999999"; + this.labelPassCount.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelPassCount.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelPassCount.Wordwrap = false; + // + // labelUnderCount + // + this.labelUnderCount.BackColor = System.Drawing.Color.Black; + this.labelUnderCount.BackPictureBox = null; + this.labelUnderCount.BackPictureBox1 = null; + this.labelUnderCount.BackPictureBox2 = null; + this.labelUnderCount.BorderColor = System.Drawing.Color.Black; + this.labelUnderCount.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelUnderCount.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelUnderCount.ForeColor = System.Drawing.Color.White; + this.labelUnderCount.InitVisible = true; + this.labelUnderCount.LineSpacing = 0F; + this.labelUnderCount.Location = new System.Drawing.Point(391, 108); + this.labelUnderCount.Name = "labelUnderCount"; + this.labelUnderCount.Size = new System.Drawing.Size(73, 21); + this.labelUnderCount.TabIndex = 716; + this.labelUnderCount.Text = "999999999"; + this.labelUnderCount.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelUnderCount.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelUnderCount.Wordwrap = false; + // + // labelAlarmStatus + // + this.labelAlarmStatus.BackColor = System.Drawing.Color.Black; + this.labelAlarmStatus.BackPictureBox = null; + this.labelAlarmStatus.BackPictureBox1 = null; + this.labelAlarmStatus.BackPictureBox2 = null; + this.labelAlarmStatus.BorderColor = System.Drawing.Color.Black; + this.labelAlarmStatus.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelAlarmStatus.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelAlarmStatus.ForeColor = System.Drawing.Color.White; + this.labelAlarmStatus.InitVisible = true; + this.labelAlarmStatus.LineSpacing = 0F; + this.labelAlarmStatus.Location = new System.Drawing.Point(613, 160); + this.labelAlarmStatus.Name = "labelAlarmStatus"; + this.labelAlarmStatus.Size = new System.Drawing.Size(73, 21); + this.labelAlarmStatus.TabIndex = 725; + this.labelAlarmStatus.Text = "999999999"; + this.labelAlarmStatus.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelAlarmStatus.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelAlarmStatus.Wordwrap = false; + // + // labelOperationStatus + // + this.labelOperationStatus.BackColor = System.Drawing.Color.Black; + this.labelOperationStatus.BackPictureBox = null; + this.labelOperationStatus.BackPictureBox1 = null; + this.labelOperationStatus.BackPictureBox2 = null; + this.labelOperationStatus.BorderColor = System.Drawing.Color.Black; + this.labelOperationStatus.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOperationStatus.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOperationStatus.ForeColor = System.Drawing.Color.White; + this.labelOperationStatus.InitVisible = true; + this.labelOperationStatus.LineSpacing = 0F; + this.labelOperationStatus.Location = new System.Drawing.Point(613, 134); + this.labelOperationStatus.Name = "labelOperationStatus"; + this.labelOperationStatus.Size = new System.Drawing.Size(73, 21); + this.labelOperationStatus.TabIndex = 724; + this.labelOperationStatus.Text = "999999999"; + this.labelOperationStatus.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOperationStatus.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOperationStatus.Wordwrap = false; + // + // labelWeight + // + this.labelWeight.BackColor = System.Drawing.Color.Black; + this.labelWeight.BackPictureBox = null; + this.labelWeight.BackPictureBox1 = null; + this.labelWeight.BackPictureBox2 = null; + this.labelWeight.BorderColor = System.Drawing.Color.Black; + this.labelWeight.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelWeight.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelWeight.ForeColor = System.Drawing.Color.White; + this.labelWeight.InitVisible = true; + this.labelWeight.LineSpacing = 0F; + this.labelWeight.Location = new System.Drawing.Point(613, 108); + this.labelWeight.Name = "labelWeight"; + this.labelWeight.Size = new System.Drawing.Size(73, 21); + this.labelWeight.TabIndex = 723; + this.labelWeight.Text = "999999999"; + this.labelWeight.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelWeight.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelWeight.Wordwrap = false; + // + // labelReceiveCount + // + this.labelReceiveCount.BackColor = System.Drawing.Color.Black; + this.labelReceiveCount.BackPictureBox = null; + this.labelReceiveCount.BackPictureBox1 = null; + this.labelReceiveCount.BackPictureBox2 = null; + this.labelReceiveCount.BorderColor = System.Drawing.Color.Black; + this.labelReceiveCount.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelReceiveCount.Font = new System.Drawing.Font("Arial", 17F, System.Drawing.FontStyle.Bold); + this.labelReceiveCount.ForeColor = System.Drawing.Color.White; + this.labelReceiveCount.InitVisible = true; + this.labelReceiveCount.LineSpacing = 0F; + this.labelReceiveCount.Location = new System.Drawing.Point(538, 35); + this.labelReceiveCount.Name = "labelReceiveCount"; + this.labelReceiveCount.Size = new System.Drawing.Size(140, 28); + this.labelReceiveCount.TabIndex = 726; + this.labelReceiveCount.Text = "9999999999"; + this.labelReceiveCount.TextHAlign = SmartX.SmartLabel.TextHorAlign.Right; + this.labelReceiveCount.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelReceiveCount.Wordwrap = false; + // + // buttonBypassDirection + // + this.buttonBypassDirection.BackPictureBox = null; + this.buttonBypassDirection.BackPictureBox1 = null; + this.buttonBypassDirection.BackPictureBox2 = null; + this.buttonBypassDirection.ButtonColor = System.Drawing.Color.Gray; + this.buttonBypassDirection.ButtonImageAutoSize = true; + this.buttonBypassDirection.ColorKeySamplePosition = new System.Drawing.Point(0, 0); + this.buttonBypassDirection.DisableImage = null; + this.buttonBypassDirection.DownImage = ((System.Drawing.Image)(resources.GetObject("buttonBypassDirection.DownImage"))); + this.buttonBypassDirection.GroupID = 0; + this.buttonBypassDirection.InitVisible = true; + this.buttonBypassDirection.Location = new System.Drawing.Point(70, 35); + this.buttonBypassDirection.Mode = SmartX.SmartButton.BUTTONMODE.PUSH; + this.buttonBypassDirection.Name = "buttonBypassDirection"; + this.buttonBypassDirection.NestedClickEventPrevent = false; + this.buttonBypassDirection.OutlinePixel = 1; + this.buttonBypassDirection.RepeatInterval = 200; + this.buttonBypassDirection.RepeatIntervalAccelerate = null; + this.buttonBypassDirection.SafeInterval = 200; + this.buttonBypassDirection.Size = new System.Drawing.Size(80, 28); + this.buttonBypassDirection.SpecialFunction = SmartX.SmartButton.SPECIALFUNC.NONE; + this.buttonBypassDirection.TabIndex = 727; + this.buttonBypassDirection.TextColor = System.Drawing.Color.Black; + this.buttonBypassDirection.TextDownColor = System.Drawing.Color.White; + this.buttonBypassDirection.TextHAlign = SmartX.SmartButton.TextHorAlign.Middle; + this.buttonBypassDirection.TextLocation = new System.Drawing.Point(0, 0); + this.buttonBypassDirection.TextVAlign = SmartX.SmartButton.TextVerAlign.Middle; + this.buttonBypassDirection.UpImage = ((System.Drawing.Image)(resources.GetObject("buttonBypassDirection.UpImage"))); + this.buttonBypassDirection.Click += new System.EventHandler(this.buttonBypassDirection_Click); + // + // labelStartAddress + // + this.labelStartAddress.BackColor = System.Drawing.Color.Black; + this.labelStartAddress.BackPictureBox = null; + this.labelStartAddress.BackPictureBox1 = null; + this.labelStartAddress.BackPictureBox2 = null; + this.labelStartAddress.BorderColor = System.Drawing.Color.Black; + this.labelStartAddress.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelStartAddress.Font = new System.Drawing.Font("Arial", 17F, System.Drawing.FontStyle.Bold); + this.labelStartAddress.ForeColor = System.Drawing.Color.White; + this.labelStartAddress.InitVisible = true; + this.labelStartAddress.LineSpacing = 0F; + this.labelStartAddress.Location = new System.Drawing.Point(382, 35); + this.labelStartAddress.Name = "labelStartAddress"; + this.labelStartAddress.Size = new System.Drawing.Size(79, 28); + this.labelStartAddress.TabIndex = 729; + this.labelStartAddress.Text = "99999"; + this.labelStartAddress.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelStartAddress.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelStartAddress.Wordwrap = false; + // + // labelOffset1 + // + this.labelOffset1.BackColor = System.Drawing.Color.Black; + this.labelOffset1.BackPictureBox = this.pictureBox1; + this.labelOffset1.BackPictureBox1 = null; + this.labelOffset1.BackPictureBox2 = null; + this.labelOffset1.BorderColor = System.Drawing.Color.Black; + this.labelOffset1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOffset1.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOffset1.ForeColor = System.Drawing.Color.White; + this.labelOffset1.InitVisible = true; + this.labelOffset1.LineSpacing = 0F; + this.labelOffset1.Location = new System.Drawing.Point(22, 108); + this.labelOffset1.Name = "labelOffset1"; + this.labelOffset1.Size = new System.Drawing.Size(51, 21); + this.labelOffset1.TabIndex = 730; + this.labelOffset1.Text = "0x000A"; + this.labelOffset1.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOffset1.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOffset1.Wordwrap = false; + // + // labelOffset2 + // + this.labelOffset2.BackColor = System.Drawing.Color.Black; + this.labelOffset2.BackPictureBox = this.pictureBox1; + this.labelOffset2.BackPictureBox1 = null; + this.labelOffset2.BackPictureBox2 = null; + this.labelOffset2.BorderColor = System.Drawing.Color.Black; + this.labelOffset2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOffset2.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOffset2.ForeColor = System.Drawing.Color.White; + this.labelOffset2.InitVisible = true; + this.labelOffset2.LineSpacing = 0F; + this.labelOffset2.Location = new System.Drawing.Point(22, 134); + this.labelOffset2.Name = "labelOffset2"; + this.labelOffset2.Size = new System.Drawing.Size(51, 21); + this.labelOffset2.TabIndex = 731; + this.labelOffset2.Text = "0x000A"; + this.labelOffset2.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOffset2.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOffset2.Wordwrap = false; + // + // labelOffset3 + // + this.labelOffset3.BackColor = System.Drawing.Color.Black; + this.labelOffset3.BackPictureBox = this.pictureBox1; + this.labelOffset3.BackPictureBox1 = null; + this.labelOffset3.BackPictureBox2 = null; + this.labelOffset3.BorderColor = System.Drawing.Color.Black; + this.labelOffset3.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOffset3.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOffset3.ForeColor = System.Drawing.Color.White; + this.labelOffset3.InitVisible = true; + this.labelOffset3.LineSpacing = 0F; + this.labelOffset3.Location = new System.Drawing.Point(22, 160); + this.labelOffset3.Name = "labelOffset3"; + this.labelOffset3.Size = new System.Drawing.Size(51, 21); + this.labelOffset3.TabIndex = 732; + this.labelOffset3.Text = "0x000A"; + this.labelOffset3.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOffset3.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOffset3.Wordwrap = false; + // + // labelOffset4 + // + this.labelOffset4.BackColor = System.Drawing.Color.Black; + this.labelOffset4.BackPictureBox = this.pictureBox1; + this.labelOffset4.BackPictureBox1 = null; + this.labelOffset4.BackPictureBox2 = null; + this.labelOffset4.BorderColor = System.Drawing.Color.Black; + this.labelOffset4.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOffset4.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOffset4.ForeColor = System.Drawing.Color.White; + this.labelOffset4.InitVisible = true; + this.labelOffset4.LineSpacing = 0F; + this.labelOffset4.Location = new System.Drawing.Point(22, 186); + this.labelOffset4.Name = "labelOffset4"; + this.labelOffset4.Size = new System.Drawing.Size(51, 21); + this.labelOffset4.TabIndex = 733; + this.labelOffset4.Text = "0x000A"; + this.labelOffset4.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOffset4.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOffset4.Wordwrap = false; + // + // labelOffset5 + // + this.labelOffset5.BackColor = System.Drawing.Color.Black; + this.labelOffset5.BackPictureBox = this.pictureBox1; + this.labelOffset5.BackPictureBox1 = null; + this.labelOffset5.BackPictureBox2 = null; + this.labelOffset5.BorderColor = System.Drawing.Color.Black; + this.labelOffset5.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOffset5.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOffset5.ForeColor = System.Drawing.Color.White; + this.labelOffset5.InitVisible = true; + this.labelOffset5.LineSpacing = 0F; + this.labelOffset5.Location = new System.Drawing.Point(22, 212); + this.labelOffset5.Name = "labelOffset5"; + this.labelOffset5.Size = new System.Drawing.Size(51, 21); + this.labelOffset5.TabIndex = 734; + this.labelOffset5.Text = "0x000A"; + this.labelOffset5.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOffset5.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOffset5.Wordwrap = false; + // + // labelOffset6 + // + this.labelOffset6.BackColor = System.Drawing.Color.Black; + this.labelOffset6.BackPictureBox = this.pictureBox1; + this.labelOffset6.BackPictureBox1 = null; + this.labelOffset6.BackPictureBox2 = null; + this.labelOffset6.BorderColor = System.Drawing.Color.Black; + this.labelOffset6.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOffset6.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOffset6.ForeColor = System.Drawing.Color.White; + this.labelOffset6.InitVisible = true; + this.labelOffset6.LineSpacing = 0F; + this.labelOffset6.Location = new System.Drawing.Point(22, 238); + this.labelOffset6.Name = "labelOffset6"; + this.labelOffset6.Size = new System.Drawing.Size(51, 21); + this.labelOffset6.TabIndex = 735; + this.labelOffset6.Text = "0x000A"; + this.labelOffset6.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOffset6.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOffset6.Wordwrap = false; + // + // labelOffset7 + // + this.labelOffset7.BackColor = System.Drawing.Color.Black; + this.labelOffset7.BackPictureBox = this.pictureBox1; + this.labelOffset7.BackPictureBox1 = null; + this.labelOffset7.BackPictureBox2 = null; + this.labelOffset7.BorderColor = System.Drawing.Color.Black; + this.labelOffset7.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOffset7.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOffset7.ForeColor = System.Drawing.Color.White; + this.labelOffset7.InitVisible = true; + this.labelOffset7.LineSpacing = 0F; + this.labelOffset7.Location = new System.Drawing.Point(22, 264); + this.labelOffset7.Name = "labelOffset7"; + this.labelOffset7.Size = new System.Drawing.Size(51, 21); + this.labelOffset7.TabIndex = 736; + this.labelOffset7.Text = "0x000A"; + this.labelOffset7.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOffset7.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOffset7.Wordwrap = false; + // + // labelOffset8 + // + this.labelOffset8.BackColor = System.Drawing.Color.Black; + this.labelOffset8.BackPictureBox = this.pictureBox1; + this.labelOffset8.BackPictureBox1 = null; + this.labelOffset8.BackPictureBox2 = null; + this.labelOffset8.BorderColor = System.Drawing.Color.Black; + this.labelOffset8.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOffset8.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOffset8.ForeColor = System.Drawing.Color.White; + this.labelOffset8.InitVisible = true; + this.labelOffset8.LineSpacing = 0F; + this.labelOffset8.Location = new System.Drawing.Point(246, 108); + this.labelOffset8.Name = "labelOffset8"; + this.labelOffset8.Size = new System.Drawing.Size(51, 21); + this.labelOffset8.TabIndex = 737; + this.labelOffset8.Text = "0x000A"; + this.labelOffset8.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOffset8.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOffset8.Wordwrap = false; + // + // labelOffset9 + // + this.labelOffset9.BackColor = System.Drawing.Color.Black; + this.labelOffset9.BackPictureBox = this.pictureBox1; + this.labelOffset9.BackPictureBox1 = null; + this.labelOffset9.BackPictureBox2 = null; + this.labelOffset9.BorderColor = System.Drawing.Color.Black; + this.labelOffset9.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOffset9.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOffset9.ForeColor = System.Drawing.Color.White; + this.labelOffset9.InitVisible = true; + this.labelOffset9.LineSpacing = 0F; + this.labelOffset9.Location = new System.Drawing.Point(246, 134); + this.labelOffset9.Name = "labelOffset9"; + this.labelOffset9.Size = new System.Drawing.Size(51, 21); + this.labelOffset9.TabIndex = 738; + this.labelOffset9.Text = "0x000A"; + this.labelOffset9.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOffset9.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOffset9.Wordwrap = false; + // + // labelOffset10 + // + this.labelOffset10.BackColor = System.Drawing.Color.Black; + this.labelOffset10.BackPictureBox = this.pictureBox1; + this.labelOffset10.BackPictureBox1 = null; + this.labelOffset10.BackPictureBox2 = null; + this.labelOffset10.BorderColor = System.Drawing.Color.Black; + this.labelOffset10.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOffset10.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOffset10.ForeColor = System.Drawing.Color.White; + this.labelOffset10.InitVisible = true; + this.labelOffset10.LineSpacing = 0F; + this.labelOffset10.Location = new System.Drawing.Point(246, 160); + this.labelOffset10.Name = "labelOffset10"; + this.labelOffset10.Size = new System.Drawing.Size(51, 21); + this.labelOffset10.TabIndex = 739; + this.labelOffset10.Text = "0x000A"; + this.labelOffset10.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOffset10.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOffset10.Wordwrap = false; + // + // labelOffset14 + // + this.labelOffset14.BackColor = System.Drawing.Color.Black; + this.labelOffset14.BackPictureBox = this.pictureBox1; + this.labelOffset14.BackPictureBox1 = null; + this.labelOffset14.BackPictureBox2 = null; + this.labelOffset14.BorderColor = System.Drawing.Color.Black; + this.labelOffset14.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOffset14.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOffset14.ForeColor = System.Drawing.Color.White; + this.labelOffset14.InitVisible = true; + this.labelOffset14.LineSpacing = 0F; + this.labelOffset14.Location = new System.Drawing.Point(246, 264); + this.labelOffset14.Name = "labelOffset14"; + this.labelOffset14.Size = new System.Drawing.Size(51, 21); + this.labelOffset14.TabIndex = 743; + this.labelOffset14.Text = "0x000A"; + this.labelOffset14.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOffset14.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOffset14.Wordwrap = false; + // + // labelOffset13 + // + this.labelOffset13.BackColor = System.Drawing.Color.Black; + this.labelOffset13.BackPictureBox = this.pictureBox1; + this.labelOffset13.BackPictureBox1 = null; + this.labelOffset13.BackPictureBox2 = null; + this.labelOffset13.BorderColor = System.Drawing.Color.Black; + this.labelOffset13.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOffset13.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOffset13.ForeColor = System.Drawing.Color.White; + this.labelOffset13.InitVisible = true; + this.labelOffset13.LineSpacing = 0F; + this.labelOffset13.Location = new System.Drawing.Point(246, 238); + this.labelOffset13.Name = "labelOffset13"; + this.labelOffset13.Size = new System.Drawing.Size(51, 21); + this.labelOffset13.TabIndex = 742; + this.labelOffset13.Text = "0x000A"; + this.labelOffset13.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOffset13.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOffset13.Wordwrap = false; + // + // labelOffset12 + // + this.labelOffset12.BackColor = System.Drawing.Color.Black; + this.labelOffset12.BackPictureBox = this.pictureBox1; + this.labelOffset12.BackPictureBox1 = null; + this.labelOffset12.BackPictureBox2 = null; + this.labelOffset12.BorderColor = System.Drawing.Color.Black; + this.labelOffset12.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOffset12.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOffset12.ForeColor = System.Drawing.Color.White; + this.labelOffset12.InitVisible = true; + this.labelOffset12.LineSpacing = 0F; + this.labelOffset12.Location = new System.Drawing.Point(246, 212); + this.labelOffset12.Name = "labelOffset12"; + this.labelOffset12.Size = new System.Drawing.Size(51, 21); + this.labelOffset12.TabIndex = 741; + this.labelOffset12.Text = "0x000A"; + this.labelOffset12.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOffset12.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOffset12.Wordwrap = false; + // + // labelOffset11 + // + this.labelOffset11.BackColor = System.Drawing.Color.Black; + this.labelOffset11.BackPictureBox = this.pictureBox1; + this.labelOffset11.BackPictureBox1 = null; + this.labelOffset11.BackPictureBox2 = null; + this.labelOffset11.BorderColor = System.Drawing.Color.Black; + this.labelOffset11.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOffset11.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOffset11.ForeColor = System.Drawing.Color.White; + this.labelOffset11.InitVisible = true; + this.labelOffset11.LineSpacing = 0F; + this.labelOffset11.Location = new System.Drawing.Point(246, 186); + this.labelOffset11.Name = "labelOffset11"; + this.labelOffset11.Size = new System.Drawing.Size(51, 21); + this.labelOffset11.TabIndex = 740; + this.labelOffset11.Text = "0x000A"; + this.labelOffset11.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOffset11.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOffset11.Wordwrap = false; + // + // labelOffset17 + // + this.labelOffset17.BackColor = System.Drawing.Color.Black; + this.labelOffset17.BackPictureBox = this.pictureBox1; + this.labelOffset17.BackPictureBox1 = null; + this.labelOffset17.BackPictureBox2 = null; + this.labelOffset17.BorderColor = System.Drawing.Color.Black; + this.labelOffset17.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOffset17.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOffset17.ForeColor = System.Drawing.Color.White; + this.labelOffset17.InitVisible = true; + this.labelOffset17.LineSpacing = 0F; + this.labelOffset17.Location = new System.Drawing.Point(470, 160); + this.labelOffset17.Name = "labelOffset17"; + this.labelOffset17.Size = new System.Drawing.Size(51, 21); + this.labelOffset17.TabIndex = 746; + this.labelOffset17.Text = "0x000A"; + this.labelOffset17.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOffset17.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOffset17.Wordwrap = false; + // + // labelOffset16 + // + this.labelOffset16.BackColor = System.Drawing.Color.Black; + this.labelOffset16.BackPictureBox = this.pictureBox1; + this.labelOffset16.BackPictureBox1 = null; + this.labelOffset16.BackPictureBox2 = null; + this.labelOffset16.BorderColor = System.Drawing.Color.Black; + this.labelOffset16.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOffset16.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOffset16.ForeColor = System.Drawing.Color.White; + this.labelOffset16.InitVisible = true; + this.labelOffset16.LineSpacing = 0F; + this.labelOffset16.Location = new System.Drawing.Point(470, 134); + this.labelOffset16.Name = "labelOffset16"; + this.labelOffset16.Size = new System.Drawing.Size(51, 21); + this.labelOffset16.TabIndex = 745; + this.labelOffset16.Text = "0x000A"; + this.labelOffset16.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOffset16.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOffset16.Wordwrap = false; + // + // labelOffset15 + // + this.labelOffset15.BackColor = System.Drawing.Color.Black; + this.labelOffset15.BackPictureBox = this.pictureBox1; + this.labelOffset15.BackPictureBox1 = null; + this.labelOffset15.BackPictureBox2 = null; + this.labelOffset15.BorderColor = System.Drawing.Color.Black; + this.labelOffset15.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelOffset15.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular); + this.labelOffset15.ForeColor = System.Drawing.Color.White; + this.labelOffset15.InitVisible = true; + this.labelOffset15.LineSpacing = 0F; + this.labelOffset15.Location = new System.Drawing.Point(470, 108); + this.labelOffset15.Name = "labelOffset15"; + this.labelOffset15.Size = new System.Drawing.Size(51, 21); + this.labelOffset15.TabIndex = 744; + this.labelOffset15.Text = "0x000A"; + this.labelOffset15.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; + this.labelOffset15.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; + this.labelOffset15.Wordwrap = false; + // + // comboBoxPort + // + this.comboBoxPort.Font = new System.Drawing.Font("새굴림", 14F, System.Drawing.FontStyle.Bold); + this.comboBoxPort.Location = new System.Drawing.Point(220, 35); + this.comboBoxPort.Name = "comboBoxPort"; + this.comboBoxPort.Size = new System.Drawing.Size(87, 28); + this.comboBoxPort.TabIndex = 747; + this.comboBoxPort.SelectedIndexChanged += new System.EventHandler(this.comboBoxPort_SelectedIndexChanged); + // + // ControlMainDisplayModbus + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(62)))), ((int)(((byte)(62)))), ((int)(((byte)(62))))); + this.Controls.Add(this.comboBoxPort); + this.Controls.Add(this.labelOffset17); + this.Controls.Add(this.labelOffset16); + this.Controls.Add(this.labelOffset15); + this.Controls.Add(this.labelOffset14); + this.Controls.Add(this.labelOffset13); + this.Controls.Add(this.labelOffset12); + this.Controls.Add(this.labelOffset11); + this.Controls.Add(this.labelOffset10); + this.Controls.Add(this.labelOffset9); + this.Controls.Add(this.labelOffset8); + this.Controls.Add(this.labelOffset7); + this.Controls.Add(this.labelOffset6); + this.Controls.Add(this.labelOffset5); + this.Controls.Add(this.labelOffset4); + this.Controls.Add(this.labelOffset3); + this.Controls.Add(this.labelOffset2); + this.Controls.Add(this.labelOffset1); + this.Controls.Add(this.labelStartAddress); + this.Controls.Add(this.buttonBypassDirection); + this.Controls.Add(this.labelReceiveCount); + this.Controls.Add(this.labelAlarmStatus); + this.Controls.Add(this.labelOperationStatus); + this.Controls.Add(this.labelWeight); + this.Controls.Add(this.labelGrade); + this.Controls.Add(this.labelTotalCount); + this.Controls.Add(this.labelExNGCount); + this.Controls.Add(this.labelNGCount); + this.Controls.Add(this.labelOverCount); + this.Controls.Add(this.labelPassCount); + this.Controls.Add(this.labelUnderCount); + this.Controls.Add(this.labelTare); + this.Controls.Add(this.labelOver); + this.Controls.Add(this.labelPass); + this.Controls.Add(this.labelUnder); + this.Controls.Add(this.labelCurrentNo); + this.Controls.Add(this.labelEquipmentID); + this.Controls.Add(this.labelUpdateFlag); + this.Controls.Add(this.pictureBox1); + this.Name = "ControlMainDisplayModbus"; + this.Size = new System.Drawing.Size(710, 320); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.PictureBox pictureBox1; + public SmartX.SmartLabel labelUpdateFlag; + public SmartX.SmartLabel labelEquipmentID; + public SmartX.SmartLabel labelUnder; + public SmartX.SmartLabel labelCurrentNo; + public SmartX.SmartLabel labelOver; + public SmartX.SmartLabel labelPass; + public SmartX.SmartLabel labelTare; + public SmartX.SmartLabel labelGrade; + public SmartX.SmartLabel labelTotalCount; + public SmartX.SmartLabel labelExNGCount; + public SmartX.SmartLabel labelNGCount; + public SmartX.SmartLabel labelOverCount; + public SmartX.SmartLabel labelPassCount; + public SmartX.SmartLabel labelUnderCount; + public SmartX.SmartLabel labelAlarmStatus; + public SmartX.SmartLabel labelOperationStatus; + public SmartX.SmartLabel labelWeight; + public SmartX.SmartLabel labelReceiveCount; + private SmartX.SmartButton buttonBypassDirection; + public SmartX.SmartLabel labelStartAddress; + public SmartX.SmartLabel labelOffset1; + public SmartX.SmartLabel labelOffset2; + public SmartX.SmartLabel labelOffset3; + public SmartX.SmartLabel labelOffset4; + public SmartX.SmartLabel labelOffset5; + public SmartX.SmartLabel labelOffset6; + public SmartX.SmartLabel labelOffset7; + public SmartX.SmartLabel labelOffset8; + public SmartX.SmartLabel labelOffset9; + public SmartX.SmartLabel labelOffset10; + public SmartX.SmartLabel labelOffset14; + public SmartX.SmartLabel labelOffset13; + public SmartX.SmartLabel labelOffset12; + public SmartX.SmartLabel labelOffset11; + public SmartX.SmartLabel labelOffset17; + public SmartX.SmartLabel labelOffset16; + public SmartX.SmartLabel labelOffset15; + private System.Windows.Forms.ComboBox comboBoxPort; + + } +} diff --git a/ITC81DB_0H/Controls/MainDisplay/ControlMainDisplayModbus.cs b/ITC81DB_0H/Controls/MainDisplay/ControlMainDisplayModbus.cs new file mode 100644 index 0000000..9f54cf4 --- /dev/null +++ b/ITC81DB_0H/Controls/MainDisplay/ControlMainDisplayModbus.cs @@ -0,0 +1,313 @@ +using System; +using System.Linq; +using System.Collections.ObjectModel; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; + +using ITC81DB_0H.Forms; +using ITC81DB_2H_ImageDll; +using SmartX; + +namespace ITC81DB_0H.Controls +{ + public partial class ControlMainDisplayModbus : UserControl + { + #region Field + private FormMainDisplay m_ParentForm; + private UInt32 ReceiveCount; + private static int ModbusCount = 17; + + private Collection CollectionOffset; + #endregion + + #region Constructor + public ControlMainDisplayModbus(FormMainDisplay parent) + { + InitializeComponent(); + + this.ParentForm = parent; + + this.InitializeDesign(); + this.DefaultSetting(); + } + #endregion + + #region Property + public FormMainDisplay 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.pictureBox1.Image = new Bitmap(images.GetImage(Class1.ButtonImages.engMainModbusScreen)); + } + else if (this.ParentForm.ParentForm.SystemConfig1.Language == DataStore.LanguageID.Chinese) + { + this.pictureBox1.Image = new Bitmap(images.GetImage(Class1.ButtonImages.chnMainModbusScreen)); + } + else if (this.ParentForm.ParentForm.SystemConfig1.Language == DataStore.LanguageID.Czech) + { + } + else if (this.ParentForm.ParentForm.SystemConfig1.Language == DataStore.LanguageID.Russian) + { + this.pictureBox1.Image = new Bitmap(images.GetImage(Class1.ButtonImages.rusMainModbusScreen)); + } + else if (this.ParentForm.ParentForm.SystemConfig1.Language == DataStore.LanguageID.German) + { + this.pictureBox1.Image = new Bitmap(images.GetImage(Class1.ButtonImages.gerMainModbusScreen)); + } + else + { + this.pictureBox1.Image = new Bitmap(images.GetImage(Class1.ButtonImages.korMainModbusScreen)); + } + } + private void DefaultSetting() + { + this.CollectionOffset = new Collection(); + this.CollectionOffset.Clear(); + this.CollectionOffset.Add(this.labelOffset1); + this.CollectionOffset.Add(this.labelOffset2); + this.CollectionOffset.Add(this.labelOffset3); + this.CollectionOffset.Add(this.labelOffset4); + this.CollectionOffset.Add(this.labelOffset5); + this.CollectionOffset.Add(this.labelOffset6); + this.CollectionOffset.Add(this.labelOffset7); + this.CollectionOffset.Add(this.labelOffset8); + this.CollectionOffset.Add(this.labelOffset9); + this.CollectionOffset.Add(this.labelOffset10); + this.CollectionOffset.Add(this.labelOffset11); + this.CollectionOffset.Add(this.labelOffset12); + this.CollectionOffset.Add(this.labelOffset13); + this.CollectionOffset.Add(this.labelOffset14); + this.CollectionOffset.Add(this.labelOffset15); + this.CollectionOffset.Add(this.labelOffset16); + this.CollectionOffset.Add(this.labelOffset17); + + this.buttonBypassDirection.ButtonUp(); + + this.ReceiveCount = 0; + this.labelReceiveCount.Text = this.ReceiveCount.ToString(); + + this.labelUpdateFlag.Text = ""; + this.labelEquipmentID.Text = ""; + this.labelCurrentNo.Text = ""; + + this.labelUnder.Text = ""; + this.labelPass.Text = ""; + this.labelOver.Text = ""; + this.labelTare.Text = ""; + + this.labelUnderCount.Text = ""; + this.labelPassCount.Text = ""; + this.labelOverCount.Text = ""; + this.labelNGCount.Text = ""; + this.labelExNGCount.Text = ""; + this.labelTotalCount.Text = ""; + + this.labelGrade.Text = ""; + this.labelWeight.Text = ""; + this.labelOperationStatus.Text = ""; + this.labelAlarmStatus.Text = ""; + } + + public void UpdateEquipmentStatusDisplay(DataStore.EquipmentStatus status) + { + + } + public void UpdateReceiveCount() + { + if (this.ReceiveCount > 999999999) + this.ReceiveCount = 0; + else + { + this.ReceiveCount++; + this.labelReceiveCount.Text = this.ReceiveCount.ToString(); + } + } + public void UpdateData(_30000_ModbusData mData) + { + if (this.buttonBypassDirection.ButtonStatus == SmartX.SmartButton.BUTSTATUS.UP) + { + this.labelUpdateFlag.Text = mData.IsUpdate.ToString(); + this.labelEquipmentID.Text = mData.EquipmentID.ToString(); + this.labelCurrentNo.Text = mData.ProductNo.ToString(); + + if(mData.UnderValue.ToString().Contains('.') == false) + this.labelUnder.Text = Helper.StringToDecimalPlacesPlusZero(mData.UnderValue.ToString(), this.ParentForm.ParentForm.SystemConfig1.DecimalPlaces); + else + this.labelUnder.Text = mData.UnderValue.ToString(); + if (mData.PassValue.ToString().Contains('.') == false) + this.labelPass.Text = Helper.StringToDecimalPlacesPlusZero(mData.PassValue.ToString(), this.ParentForm.ParentForm.SystemConfig1.DecimalPlaces); + else + this.labelPass.Text = mData.PassValue.ToString(); + if (mData.OverValue.ToString().Contains('.') == false) + this.labelOver.Text = Helper.StringToDecimalPlacesPlusZero(mData.OverValue.ToString(), this.ParentForm.ParentForm.SystemConfig1.DecimalPlaces); + else + this.labelOver.Text = mData.OverValue.ToString(); + if (mData.TareValue.ToString().Contains('.') == false) + this.labelTare.Text = Helper.StringToDecimalPlacesPlusZero(mData.TareValue.ToString(), this.ParentForm.ParentForm.SystemConfig1.DecimalPlaces); + else + this.labelTare.Text = mData.TareValue.ToString(); + + this.labelUnderCount.Text = mData.UnderCount.ToString(); + this.labelPassCount.Text = mData.PassCount.ToString(); + this.labelOverCount.Text = mData.OverCount.ToString(); + this.labelNGCount.Text = mData.NGCount.ToString(); + this.labelExNGCount.Text = mData.ExNGCount.ToString(); + this.labelTotalCount.Text = mData.TotalCount.ToString(); + + this.labelGrade.Text = mData.Grade.ToString(); + if (mData.Weight.ToString().Contains('.') == false) + this.labelWeight.Text = Helper.StringToDecimalPlacesPlusZero(mData.Weight.ToString(), this.ParentForm.ParentForm.SystemConfig1.DecimalPlaces); + else + this.labelWeight.Text = mData.Weight.ToString(); + this.labelOperationStatus.Text = mData.OperationStatus.ToString(); + this.labelAlarmStatus.Text = mData.AlarmStatus.ToString(); + } + else + { + this.labelUpdateFlag.Text = mData.HexStringIsUpdate; + this.labelEquipmentID.Text = mData.HexStringEquipmentID; + this.labelCurrentNo.Text = mData.HexStringProductNo; + + this.labelUnder.Text = mData.HexStringUnderValue; + this.labelPass.Text = mData.HexStringPassValue; + this.labelOver.Text = mData.HexStringOverValue; + this.labelTare.Text = mData.HexStringTareValue; + + this.labelUnderCount.Text = mData.HexStringUnderCount; + this.labelPassCount.Text = mData.HexStringPassCount; + this.labelOverCount.Text = mData.HexStringOverCount; + this.labelNGCount.Text = mData.HexStringNGCount; + this.labelExNGCount.Text = mData.HexStringExNGCount; + this.labelTotalCount.Text = mData.HexStringTotalCount; + + this.labelGrade.Text = mData.HexStringGrade; + this.labelWeight.Text = mData.HexStringWeight; + this.labelOperationStatus.Text = mData.HexStringOperationStatus; + this.labelAlarmStatus.Text = mData.HexStringAlarmStatus; + } + } + public void UpdateOffset(bool master, int startAddress) + { + if (master == true) + { + for (int i = 0; i < ModbusCount; i++) + { + this.CollectionOffset[i].Text = startAddress.ToString(); + startAddress += 2; + } + } + else + { + int address = 10; + for (int i = 0; i < ModbusCount; i++) + { + this.CollectionOffset[i].Text = "0x" + address.ToString("X4"); + address += 2; + } + } + } + public void UpdateDisplay(string portName) + { + switch (portName) + { + case "COM1": + if (this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSelectFunction == (int)DataStore.ModbusFunction._04_ReadInputRegister) + { + this.labelStartAddress.Text = "-"; + this.UpdateOffset(false, this.ParentForm.ParentForm.SystemConfig2.ModbusRTUStartAddressCOM1); + } + else + { + this.labelStartAddress.Text = this.ParentForm.ParentForm.SystemConfig2.ModbusRTUStartAddressCOM1.ToString(); + this.UpdateOffset(true, this.ParentForm.ParentForm.SystemConfig2.ModbusRTUStartAddressCOM1); + } + break; + case "COM3": + if (this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSelectFunction == (int)DataStore.ModbusFunction._04_ReadInputRegister) + { + this.labelStartAddress.Text = "-"; + this.UpdateOffset(false, this.ParentForm.ParentForm.SystemConfig2.ModbusRTUStartAddressCOM3); + } + else + { + this.labelStartAddress.Text = this.ParentForm.ParentForm.SystemConfig2.ModbusRTUStartAddressCOM3.ToString(); + this.UpdateOffset(true, this.ParentForm.ParentForm.SystemConfig2.ModbusRTUStartAddressCOM3); + } + break; + case "COM4": + if (this.ParentForm.ParentForm.SystemConfig2.ModbusRTUSelectFunction == (int)DataStore.ModbusFunction._04_ReadInputRegister) + { + this.labelStartAddress.Text = "-"; + this.UpdateOffset(false, this.ParentForm.ParentForm.SystemConfig2.ModbusRTUStartAddressCOM4); + } + else + { + this.labelStartAddress.Text = this.ParentForm.ParentForm.SystemConfig2.ModbusRTUStartAddressCOM4.ToString(); + this.UpdateOffset(true, this.ParentForm.ParentForm.SystemConfig2.ModbusRTUStartAddressCOM4); + } + break; + case "TCP": + if (this.ParentForm.ParentForm.SystemConfig2.ModbusTCPSelectFunction == (int)DataStore.ModbusFunction._04_ReadInputRegister) + { + this.labelStartAddress.Text = "-"; + this.UpdateOffset(false, this.ParentForm.ParentForm.SystemConfig2.ModbusTCPStartAddress); + } + else + { + this.labelStartAddress.Text = this.ParentForm.ParentForm.SystemConfig2.ModbusTCPStartAddress.ToString(); + this.UpdateOffset(true, this.ParentForm.ParentForm.SystemConfig2.ModbusTCPStartAddress); + } + break; + default: + break; + } + } + + public void DisplayRefresh(SystemStatus status) + { + this.comboBoxPort.Items.Clear(); + if (this.ParentForm.ParentForm.SystemConfig1.SerialCOM1Mode == (int)DataStore.SerialMode.f22_Modbus_RTU + || this.ParentForm.ParentForm.SystemConfig1.SerialCOM1Mode == (int)DataStore.SerialMode.f16_OPC) + this.comboBoxPort.Items.Add("COM1"); + if (this.ParentForm.ParentForm.SystemConfig1.SerialCOM3Mode == (int)DataStore.SerialMode.f22_Modbus_RTU + || this.ParentForm.ParentForm.SystemConfig1.SerialCOM3Mode == (int)DataStore.SerialMode.f16_OPC) + this.comboBoxPort.Items.Add("COM3"); + if (this.ParentForm.ParentForm.SystemConfig1.SerialCOM4Mode == (int)DataStore.SerialMode.f22_Modbus_RTU + || this.ParentForm.ParentForm.SystemConfig1.SerialCOM4Mode == (int)DataStore.SerialMode.f16_OPC) + this.comboBoxPort.Items.Add("COM4"); + if (this.ParentForm.ParentForm.SystemConfig2.EthernetCommMode == (int)DataStore.EthernetMode.f22_Modbus_TCP + || this.ParentForm.ParentForm.SystemConfig2.EthernetCommMode == (int)DataStore.EthernetMode.f16_OPC) + this.comboBoxPort.Items.Add("TCP"); + this.comboBoxPort.SelectedIndex = 0; + + this.UpdateDisplay(this.comboBoxPort.SelectedItem.ToString()); + this.UpdateData(this.ParentForm.ParentForm.Current30000ModbusData); + } + #endregion + + #region Event Handler + private void buttonBypassDirection_Click(object sender, EventArgs e) + { + this.UpdateData(this.ParentForm.ParentForm.Current30000ModbusData); + } + private void comboBoxPort_SelectedIndexChanged(object sender, EventArgs e) + { + this.UpdateDisplay(this.comboBoxPort.SelectedItem.ToString()); + } + #endregion + } +} diff --git a/ITC81DB_0H/Controls/MainDisplay/ControlMainDisplayModbus.resx b/ITC81DB_0H/Controls/MainDisplay/ControlMainDisplayModbus.resx new file mode 100644 index 0000000..c52102f --- /dev/null +++ b/ITC81DB_0H/Controls/MainDisplay/ControlMainDisplayModbus.resx @@ -0,0 +1,787 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + QmCC + + + + + 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 + + + + WEBPAD + + \ No newline at end of file diff --git a/ITC81DB_0H/DataStore.cs b/ITC81DB_0H/DataStore.cs index 339bb65..a62bf4d 100644 --- a/ITC81DB_0H/DataStore.cs +++ b/ITC81DB_0H/DataStore.cs @@ -5,6 +5,8 @@ using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; +using InModbus; + namespace ITC81DB_0H { public class DataStore @@ -83,12 +85,13 @@ namespace ITC81DB_0H public enum MainDisplayStore { //DisplayStop, - DisplayStartBarGraph, - DisplayStartLineGraph, - DisplayStartList, - DisplayStopDataStat, - DisplayStartMenu, - DisplayFeedback, + BarGraph, + LineGraph, + List, + DataStat, + SubMenu, + Feedback, + Modbus, } public enum MenuSide @@ -385,6 +388,13 @@ namespace ITC81DB_0H IN15_ExInputCheck, IN16_DischargeSorterB, } + + public enum ModbusFunction + { + _04_ReadInputRegister, + _16_WriteMultipleRegister, + _03_ReadHoldingRegister, + } #endregion } @@ -629,10 +639,8 @@ namespace ITC81DB_0H // 자동영점 - 변량 public static readonly string AutoZeroVariate = "4044"; - // 자동영점 - 모드1 파라미터 읽기 - public static readonly string ParameterRead4901 = "4901"; - // 자동영점 - 모드2 파라미터 읽기 - public static readonly string ParameterRead4902 = "4902"; + // 자동영점 - 파라미터 읽기 + public static readonly string ParameterRead4907 = "4907"; // 판정설정 - 필터 public static readonly string Filter = "5001"; @@ -940,6 +948,995 @@ namespace ITC81DB_0H } #endregion + #region Modbus + public class _30000_ModbusAddress + { + public const int _01_IsUpdate_High = 10; + public const int _02_IsUpdate_Low = 11; + public const int _03_EquipmentID_High = 12; + public const int _04_EquipmentID_Low = 13; + public const int _05_ProductNo_High = 14; + public const int _06_ProductNo_Low = 15; + public const int _07_UnderValue_High = 16; + public const int _08_UnderValue_Low = 17; + public const int _09_PassValue_High = 18; + public const int _10_PassValue_Low = 19; + public const int _11_OverValue_High = 20; + public const int _12_OverValue_Low = 21; + public const int _13_TareValue_High = 22; + public const int _14_TareValue_Low = 23; + public const int _15_UnderCount_High = 24; + public const int _16_UnderCount_Low = 25; + public const int _17_PassCount_High = 26; + public const int _18_PassCount_Low = 27; + public const int _19_OverCount_High = 28; + public const int _20_OverCount_Low = 29; + public const int _21_NGCount_High = 30; + public const int _22_NGCount_Low = 31; + public const int _23_ExNGCount_High = 32; + public const int _24_ExNGCount_Low = 33; + public const int _25_TotalCount_High = 34; + public const int _26_TotalCount_Low = 35; + public const int _27_Grade_High = 36; + public const int _28_Grade_Low = 37; + public const int _29_Weight_High = 38; + public const int _30_Weight_Low = 39; + public const int _31_OperationStatus_High = 40; + public const int _32_OperationStatus_Low = 41; + public const int _33_AlarmStatus_High = 42; + public const int _34_AlarmStatus_Low = 43; + + #region V7 + //public const int _01_EquipmentID = 10; + //public const int _02_ProductNo = 11; + //public const int _03_UnderValue_High = 12; + //public const int _04_UnderValue_Low = 13; + //public const int _05_PassValue_High = 14; + //public const int _06_PassValue_Low = 15; + //public const int _07_OverValue_High = 16; + //public const int _08_OverValue_Low = 17; + //public const int _09_UnderCount_High = 18; + //public const int _10_UnderCount_Low = 19; + //public const int _11_PassCount_High = 20; + //public const int _12_PassCount_Low = 21; + //public const int _13_OverCount_High = 22; + //public const int _14_OverCount_Low = 23; + //public const int _15_NGCount_High = 24; + //public const int _16_NGCount_Low = 25; + //public const int _17_ExNGCount_High = 26; + //public const int _18_ExNGCount_Low = 27; + //public const int _19_TotalCount_High = 28; + //public const int _20_TotalCount_Low = 29; + //public const int _21_Grade = 30; + //public const int _22_Weight_High = 31; + //public const int _23_Weight_Low = 32; + //public const int _24_OperationStatus = 33; + #endregion + } + public class _30000_ModbusData + { + #region Field + private int m_IsUpdate; + private int m_EquipmentID; + private int m_ProductNo; + private double m_UnderValue; + private double m_PassValue; + private double m_OverValue; + private double m_TareValue; + private UInt32 m_UnderCount; + private UInt32 m_PassCount; + private UInt32 m_OverCount; + private UInt32 m_NGCount; + private UInt32 m_ExNGCount; + private UInt32 m_TotalCount; + private int m_Grade; + private double m_Weight; + private int m_OperationStatus; + private int m_AlarmStatus; + #endregion + + #region Constructor + public _30000_ModbusData() + { + this.Initialization(); + } + #endregion + + #region Property + public int IsUpdate + { + get { return this.m_IsUpdate; } + set { this.m_IsUpdate = value; } + } + public int EquipmentID + { + get { return this.m_EquipmentID; } + set { this.m_EquipmentID = value; } + } + public int ProductNo + { + get { return this.m_ProductNo; } + set { this.m_ProductNo = value; } + } + + public double UnderValue + { + get { return this.m_UnderValue; } + set { this.m_UnderValue = value; } + } + public double PassValue + { + get { return this.m_PassValue; } + set { this.m_PassValue = value; } + } + public double OverValue + { + get { return this.m_OverValue; } + set { this.m_OverValue = value; } + } + public double TareValue + { + get { return this.m_TareValue; } + set { this.m_TareValue = value; } + } + + public UInt32 UnderCount + { + get { return this.m_UnderCount; } + set { this.m_UnderCount = value; } + } + public UInt32 PassCount + { + get { return this.m_PassCount; } + set { this.m_PassCount = value; } + } + public UInt32 OverCount + { + get { return this.m_OverCount; } + set { this.m_OverCount = value; } + } + public UInt32 NGCount + { + get { return this.m_NGCount; } + set { this.m_NGCount = value; } + } + public UInt32 ExNGCount + { + get { return this.m_ExNGCount; } + set { this.m_ExNGCount = value; } + } + public UInt32 TotalCount + { + get { return this.m_TotalCount; } + set { this.m_TotalCount = value; } + } + + public int Grade + { + get { return this.m_Grade; } + set { this.m_Grade = value; } + } + public double Weight + { + get { return this.m_Weight; } + set { this.m_Weight = value; } + } + public int OperationStatus + { + get { return this.m_OperationStatus; } + set { this.m_OperationStatus = value; } + } + public int AlarmStatus + { + get { return this.m_AlarmStatus; } + set { this.m_AlarmStatus = value; } + } + + public string HexStringIsUpdate + { + get + { + string hexString = this.IsUpdate.ToString("X8"); + return hexString; + } + } + public string HexStringEquipmentID + { + get + { + string hexString = this.EquipmentID.ToString("X8"); + return hexString; + } + } + public string HexStringProductNo + { + get + { + string hexString = this.ProductNo.ToString("X8"); + return hexString; + } + } + public string HexStringUnderValue + { + get + { + byte[] bytes = BitConverter.GetBytes((float)this.UnderValue); + Array.Reverse(bytes); + string hexString = BitConverter.ToString(bytes); + hexString = hexString.Replace("-", ""); + + return hexString; + } + } + public string HexStringPassValue + { + get + { + byte[] bytes = BitConverter.GetBytes((float)this.PassValue); + Array.Reverse(bytes); + string hexString = BitConverter.ToString(bytes); + hexString = hexString.Replace("-", ""); + + return hexString; + } + } + public string HexStringOverValue + { + get + { + byte[] bytes = BitConverter.GetBytes((float)this.OverValue); + Array.Reverse(bytes); + string hexString = BitConverter.ToString(bytes); + hexString = hexString.Replace("-", ""); + + return hexString; + } + } + public string HexStringTareValue + { + get + { + byte[] bytes = BitConverter.GetBytes((float)this.TareValue); + Array.Reverse(bytes); + string hexString = BitConverter.ToString(bytes); + hexString = hexString.Replace("-", ""); + + return hexString; + } + } + public string HexStringUnderCount + { + get + { + string hexString = this.UnderCount.ToString("X8"); + return hexString; + } + } + public string HexStringPassCount + { + get + { + string hexString = this.PassCount.ToString("X8"); + return hexString; + } + } + public string HexStringOverCount + { + get + { + string hexString = this.OverCount.ToString("X8"); + return hexString; + } + } + public string HexStringNGCount + { + get + { + string hexString = this.NGCount.ToString("X8"); + return hexString; + } + } + public string HexStringExNGCount + { + get + { + string hexString = this.ExNGCount.ToString("X8"); + return hexString; + } + } + public string HexStringTotalCount + { + get + { + string hexString = this.TotalCount.ToString("X8"); + return hexString; + } + } + public string HexStringGrade + { + get + { + string hexString = this.Grade.ToString("X8"); + return hexString; + } + } + public string HexStringWeight + { + get + { + byte[] bytes = BitConverter.GetBytes((float)this.Weight); + byte[] reverseBytes = new byte[bytes.Length]; + for (int i = 0; i < bytes.Length; i++) + reverseBytes[bytes.Length - 1 - i] = bytes[i]; + string hexString = BitConverter.ToString(reverseBytes); + + hexString = hexString.Replace("-", ""); + + return hexString; + } + } + public string HexStringOperationStatus + { + get + { + string hexString = this.OperationStatus.ToString("X8"); + return hexString; + } + } + public string HexStringAlarmStatus + { + get + { + string hexString = this.AlarmStatus.ToString("X8"); + return hexString; + } + } + + public byte[] _01_IsUpdate_High + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.IsUpdate); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[3 - i]; + + return madeData; + } + } + public byte[] _02_IsUpdate_Low + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.IsUpdate); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[1 - i]; + + return madeData; + } + } + public byte[] _03_EquipmentID_High + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.EquipmentID); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[3 - i]; + + return madeData; + } + } + public byte[] _04_EquipmentID_Low + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.EquipmentID); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[1 - i]; + + return madeData; + } + } + public byte[] _05_ProductNo_High + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.ProductNo); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[3 - i]; + + return madeData; + } + } + public byte[] _06_ProductNo_Low + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.ProductNo); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[1 - i]; + + return madeData; + } + } + public byte[] _07_UnderValue_High + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes((Single)this.UnderValue); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[3 - i]; + + return madeData; + } + } + public byte[] _08_UnderValue_Low + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes((Single)this.UnderValue); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[1 - i]; + + return madeData; + } + } + public byte[] _09_PassValue_High + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes((Single)this.PassValue); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[3 - i]; + + return madeData; + } + } + public byte[] _10_PassValue_Low + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes((Single)this.PassValue); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[1 - i]; + + return madeData; + } + } + public byte[] _11_OverValue_High + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes((Single)this.OverValue); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[3 - i]; + + return madeData; + } + } + public byte[] _12_OverValue_Low + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes((Single)this.OverValue); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[1 - i]; + + return madeData; + } + } + public byte[] _13_TareValue_High + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes((Single)this.TareValue); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[3 - i]; + + return madeData; + } + } + public byte[] _14_TareValue_Low + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes((Single)this.TareValue); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[1 - i]; + + return madeData; + } + } + public byte[] _15_UnderCount_High + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.UnderCount); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[3 - i]; + + return madeData; + } + } + public byte[] _16_UnderCount_Low + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.UnderCount); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[1 - i]; + + return madeData; + } + } + public byte[] _17_PassCount_High + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.PassCount); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[3 - i]; + + return madeData; + } + } + public byte[] _18_PassCount_Low + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.PassCount); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[1 - i]; + + return madeData; + } + } + public byte[] _19_OverCount_High + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.OverCount); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[3 - i]; + + return madeData; + } + } + public byte[] _20_OverCount_Low + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.OverCount); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[1 - i]; + + return madeData; + } + } + public byte[] _21_NGCount_High + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.NGCount); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[3 - i]; + + return madeData; + } + } + public byte[] _22_NGCount_Low + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.NGCount); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[1 - i]; + + return madeData; + } + } + public byte[] _23_ExNGCount_High + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.ExNGCount); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[3 - i]; + + return madeData; + } + } + public byte[] _24_ExNGCount_Low + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.ExNGCount); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[1 - i]; + + return madeData; + } + } + public byte[] _25_TotalCount_High + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.TotalCount); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[3 - i]; + + return madeData; + } + } + public byte[] _26_TotalCount_Low + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.TotalCount); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[1 - i]; + + return madeData; + } + } + public byte[] _27_Grade_High + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.Grade); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[3 - i]; + + return madeData; + } + } + public byte[] _28_Grade_Low + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.Grade); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[1 - i]; + + return madeData; + } + } + public byte[] _29_Weight_High + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes((Single)this.Weight); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[3 - i]; + + return madeData; + } + } + public byte[] _30_Weight_Low + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes((Single)this.Weight); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[1 - i]; + + return madeData; + } + } + public byte[] _31_OperationStatus_High + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.OperationStatus); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[3 - i]; + + return madeData; + } + } + public byte[] _32_OperationStatus_Low + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.OperationStatus); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[1 - i]; + + return madeData; + } + } + public byte[] _33_AlarmStatus_High + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.AlarmStatus); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[3 - i]; + + return madeData; + } + } + public byte[] _34_AlarmStatus_Low + { + get + { + byte[] madeData = new byte[2]; + byte[] Length4Value = new byte[4]; + + Length4Value = Modbus.GetBytes(this.AlarmStatus); + for (int i = 0; i < 2; i++) + madeData[i] = Length4Value[1 - i]; + + return madeData; + } + } + #endregion + + #region Method + public void Initialization() + { + this.IsUpdate = 0; + this.EquipmentID = 1; + this.ProductNo = 1; + this.UnderValue = 100.0; + this.PassValue = 200.0; + this.OverValue = 300.0; + this.TareValue = 0.0; + this.UnderCount = 0; + this.PassCount = 0; + this.OverCount = 0; + this.NGCount = 0; + this.ExNGCount = 0; + this.TotalCount = 0; + this.Grade = 5; + this.Weight = 0.0; + this.OperationStatus = 0; + this.AlarmStatus = 0; + } + #endregion + } + + public class _40000_ModbusAddress + { + public const int _01_Clear = 10; + public const int _02_ClearResult = 11; + public const int _03_Operation = 12; + public const int _04_OperationResult = 13; + public const int _05_ProductChange_High = 14; + public const int _06_ProductChange_Low = 15; + public const int _07_ProductChangeResult = 16; + public const int _08_UnderRange_High = 17; + public const int _09_UnderRange_Low = 18; + public const int _10_UnderRangeResult = 19; + public const int _11_PassRange_High = 20; + public const int _12_PassRange_Low = 21; + public const int _13_PassRangeResult = 22; + public const int _14_OverRange_High = 23; + public const int _15_OverRange_Low = 24; + public const int _16_OverRangeResult = 25; + public const int _17_TareWeight_High = 26; + public const int _18_TareWeight_Low = 27; + public const int _19_TareWeightResult = 28; + } + public class _40000_ModbusData + { + #region Field + private int m_40011_Clear; + private int m_40012_ClearResult; + private int m_40013_Operation; + private int m_40014_OperationResult; + private int m_40015_ProductChange; + private int m_40017_ProductChangeResult; + private int m_40018_UnderRange; + private int m_40020_UnderRangeResult; + private int m_40021_PassRange; + private int m_40023_PassRangeResult; + private int m_40024_OverRange; + private int m_40026_OverRangeResult; + private int m_40027_TareWeight; + private int m_40029_TareWeightResult; + #endregion + + #region Constructor + public _40000_ModbusData() + { + this.Initialization(); + } + #endregion + + #region Property + public int _40011_Clear + { + get { return this.m_40011_Clear; } + set { this.m_40011_Clear = value; } + } + public int _40012_ClearResult + { + get { return this.m_40012_ClearResult; } + set { this.m_40012_ClearResult = value; } + } + public int _40013_Operation + { + get { return this.m_40013_Operation; } + set { this.m_40013_Operation = value; } + } + public int _40014_OperationResult + { + get { return this.m_40014_OperationResult; } + set { this.m_40014_OperationResult = value; } + } + public int _40015_ProductChange + { + get { return this.m_40015_ProductChange; } + set { this.m_40015_ProductChange = value; } + } + public int _40017_ProductChangeResult + { + get { return this.m_40017_ProductChangeResult; } + set { this.m_40017_ProductChangeResult = value; } + } + public int _40018_UnderRange + { + get { return this.m_40018_UnderRange; } + set { this.m_40018_UnderRange = value; } + } + public int _40020_UnderRangeResult + { + get { return this.m_40020_UnderRangeResult; } + set { this.m_40020_UnderRangeResult = value; } + } + public int _40021_PassRange + { + get { return this.m_40021_PassRange; } + set { this.m_40021_PassRange = value; } + } + public int _40023_PassRangeResult + { + get { return this.m_40023_PassRangeResult; } + set { this.m_40023_PassRangeResult = value; } + } + public int _40024_OverRange + { + get { return this.m_40024_OverRange; } + set { this.m_40024_OverRange = value; } + } + public int _40026_OverRangeResult + { + get { return this.m_40026_OverRangeResult; } + set { this.m_40026_OverRangeResult = value; } + } + public int _40027_TareWeight + { + get { return this.m_40027_TareWeight; } + set { this.m_40027_TareWeight = value; } + } + public int _40029_TareWeightResult + { + get { return this.m_40029_TareWeightResult; } + set { this.m_40029_TareWeightResult = value; } + } + #endregion + + #region Method + public void Initialization() + { + this._40011_Clear = 0; + this._40012_ClearResult = 0; + this._40013_Operation = 0; + this._40014_OperationResult = 0; + this._40015_ProductChange = 0; + this._40017_ProductChangeResult = 0; + this._40018_UnderRange = 0; + this._40020_UnderRangeResult = 0; + this._40021_PassRange = 0; + this._40023_PassRangeResult = 0; + this._40024_OverRange = 0; + this._40026_OverRangeResult = 0; + this._40027_TareWeight = 0; + this._40029_TareWeightResult = 0; + } + #endregion + } + #endregion + #region SystemConfigurationItem1 public class SystemConfigurationItem1 { @@ -1294,6 +2291,8 @@ namespace ITC81DB_0H private int m_BLDCTotalMotorNum; + private bool m_IsEthernetPingTimer; + private int m_HitachiRoomNumberEthernet; private int m_MarkoprintLineNumberEthernet; private bool m_IsMarkoprintDatePrintEthernet; @@ -1308,6 +2307,8 @@ namespace ITC81DB_0H private int m_EthernetLocalPort; private int m_Barcode; + private int m_ModbusTCPSelectFunction; + private int m_ModbusRTUSelectFunction; private int m_ModbusRTUSlaveIDCOM1; private int m_ModbusRTUSlaveIDCOM3; @@ -1316,6 +2317,11 @@ namespace ITC81DB_0H private bool m_IsBypassDirectionPass; private bool m_IsBypassOnce; private bool m_IsCommunicationOption; + + private int m_ModbusTCPStartAddress; + private int m_ModbusRTUStartAddressCOM1; + private int m_ModbusRTUStartAddressCOM3; + private int m_ModbusRTUStartAddressCOM4; #endregion #region Constructor @@ -1525,6 +2531,12 @@ namespace ITC81DB_0H set { this.m_FileNameExtension = value; } } + public bool IsEthernetPingTimer + { + get { return this.m_IsEthernetPingTimer; } + set { this.m_IsEthernetPingTimer = value; } + } + public int BLDCTotalMotorNum { get { return this.m_BLDCTotalMotorNum; } @@ -1606,6 +2618,12 @@ namespace ITC81DB_0H set { this.m_Barcode = value; } } + public int ModbusTCPSelectFunction + { + get { return this.m_ModbusTCPSelectFunction; } + set { this.m_ModbusTCPSelectFunction = value; } + } + public int ModbusRTUSelectFunction { get { return this.m_ModbusRTUSelectFunction; } @@ -1642,6 +2660,27 @@ namespace ITC81DB_0H get { return this.m_IsCommunicationOption; } set { this.m_IsCommunicationOption = value; } } + + public int ModbusTCPStartAddress + { + get { return this.m_ModbusTCPStartAddress; } + set { this.m_ModbusTCPStartAddress = value; } + } + public int ModbusRTUStartAddressCOM1 + { + get { return this.m_ModbusRTUStartAddressCOM1; } + set { this.m_ModbusRTUStartAddressCOM1 = value; } + } + public int ModbusRTUStartAddressCOM3 + { + get { return this.m_ModbusRTUStartAddressCOM3; } + set { this.m_ModbusRTUStartAddressCOM3 = value; } + } + public int ModbusRTUStartAddressCOM4 + { + get { return this.m_ModbusRTUStartAddressCOM4; } + set { this.m_ModbusRTUStartAddressCOM4 = value; } + } #endregion #region Method @@ -1705,6 +2744,8 @@ namespace ITC81DB_0H this.EthernetLocalPort = 0; this.Barcode = 0; + this.ModbusTCPSelectFunction = 0; + this.ModbusRTUSelectFunction = 0; this.ModbusRTUSlaveIDCOM1 = 1; this.ModbusRTUSlaveIDCOM3 = 1; @@ -1713,6 +2754,12 @@ namespace ITC81DB_0H this.IsBypassDirectionPass = true; this.IsBypassOnce = true; this.IsCommunicationOption = false; + + this.IsEthernetPingTimer = false; + this.ModbusTCPStartAddress = 10; + this.ModbusRTUStartAddressCOM1 = 10; + this.ModbusRTUStartAddressCOM3 = 10; + this.ModbusRTUStartAddressCOM4 = 10; } #endregion } @@ -1760,11 +2807,11 @@ namespace ITC81DB_0H public int DummyInt2; public int DummyInt3; public int DummyInt4; - public int DummyInt5; - public int DummyInt6; - public int DummyInt7; - public int DummyInt8; - public int DummyInt9; + public int ModbusTCPStartAddress; + public int ModbusRTUStartAddressCOM1; + public int ModbusRTUStartAddressCOM3; + public int ModbusRTUStartAddressCOM4; + public int ModbusTCPSelectFunction; public int BLDCTotalMotorNum; public int ModbusRTUSelectFunction; public int ModbusRTUSlaveIDCOM1; diff --git a/ITC81DB_0H/Forms/FormMain.Designer.cs b/ITC81DB_0H/Forms/FormMain.Designer.cs index 5d965e9..797cdd3 100644 --- a/ITC81DB_0H/Forms/FormMain.Designer.cs +++ b/ITC81DB_0H/Forms/FormMain.Designer.cs @@ -40,12 +40,10 @@ this.smartSerialPort3 = new SmartX.SmartSerialPort(); this.smartThread = new SmartX.SmartThread(this.components); this.smartTCPMultiServer = new SmartX.SmartTCPMultiServer(); - this.smartModbusSlave1 = new SmartX.SmartModbusSlave(); - this.smartModbusSlave3 = new SmartX.SmartModbusSlave(); - this.smartModbusSlave4 = new SmartX.SmartModbusSlave(); this.smartFileCheckLog = new SmartX.SmartFile(); this.timeOut = new System.Windows.Forms.Timer(); this.smartTimerUpdate = new SmartX.SmartTimer(this.components); + this.timerEthernetPing = new System.Windows.Forms.Timer(); ((System.ComponentModel.ISupportInitialize)(this.smartForm)).BeginInit(); this.SuspendLayout(); // @@ -92,6 +90,7 @@ this.smartSerialPort2.ReceiveFrameDebugMode = false; this.smartSerialPort2.RS485SoftwareDetection = false; this.smartSerialPort2.STXCode = ((byte)(2)); + this.smartSerialPort2.STXCodes = null; this.smartSerialPort2.TailErrorCodeOffset = 0; this.smartSerialPort2.OnReadQueueEvent += new SmartX.SmartSerialPort.ReceiveDataHandler(this.smartSerialPort2_OnReadQueueEvent); // @@ -112,6 +111,7 @@ this.smartSerialPort1.ReceiveFrameDebugMode = false; this.smartSerialPort1.RS485SoftwareDetection = false; this.smartSerialPort1.STXCode = ((byte)(2)); + this.smartSerialPort1.STXCodes = null; this.smartSerialPort1.TailErrorCodeOffset = 0; this.smartSerialPort1.OnReadQueueEvent += new SmartX.SmartSerialPort.ReceiveDataHandler(this.smartSerialPort1_OnReadQueueEvent); // @@ -132,6 +132,7 @@ this.smartSerialPort4.ReceiveFrameDebugMode = false; this.smartSerialPort4.RS485SoftwareDetection = false; this.smartSerialPort4.STXCode = ((byte)(2)); + this.smartSerialPort4.STXCodes = null; this.smartSerialPort4.TailErrorCodeOffset = 0; this.smartSerialPort4.OnReadQueueEvent += new SmartX.SmartSerialPort.ReceiveDataHandler(this.smartSerialPort4_OnReadQueueEvent); // @@ -152,6 +153,7 @@ this.smartSerialPort3.ReceiveFrameDebugMode = false; this.smartSerialPort3.RS485SoftwareDetection = false; this.smartSerialPort3.STXCode = ((byte)(2)); + this.smartSerialPort3.STXCodes = null; this.smartSerialPort3.TailErrorCodeOffset = 0; this.smartSerialPort3.OnReadQueueEvent += new SmartX.SmartSerialPort.ReceiveDataHandler(this.smartSerialPort3_OnReadQueueEvent); // @@ -169,36 +171,6 @@ this.smartTCPMultiServer.OnClientAdd += new SmartX.SmartTCPMultiServer.ClientAddHandler(this.smartTCPMultiServer_OnClientAdd); this.smartTCPMultiServer.OnReceiveHandler += new SmartX.SmartTCPMultiServer.ReceiveHandler(this.smartTCPMultiServer_OnReceiveHandler); // - // smartModbusSlave1 - // - this.smartModbusSlave1.Buad_Rate = SmartX.SmartModbusSlave.BUADRATE.CBR_9600; - this.smartModbusSlave1.Parity = System.IO.Ports.Parity.None; - this.smartModbusSlave1.PortNo = SmartX.SmartModbusSlave.COMPORTNO.COM1; - this.smartModbusSlave1.ProtocolType = SmartX.SmartModbusSlave.PROTOCOL.RTU; - this.smartModbusSlave1.SlaveAddress = 1; - this.smartModbusSlave1.StopBits = System.IO.Ports.StopBits.One; - this.smartModbusSlave1.OnReadHoldingRegisters += new SmartX.SmartModbusSlave.ReadHoldingRegisterHandler(this.smartModbusSlave1_OnReadHoldingRegisters); - // - // smartModbusSlave3 - // - this.smartModbusSlave3.Buad_Rate = SmartX.SmartModbusSlave.BUADRATE.CBR_9600; - this.smartModbusSlave3.Parity = System.IO.Ports.Parity.None; - this.smartModbusSlave3.PortNo = SmartX.SmartModbusSlave.COMPORTNO.COM3; - this.smartModbusSlave3.ProtocolType = SmartX.SmartModbusSlave.PROTOCOL.RTU; - this.smartModbusSlave3.SlaveAddress = 1; - this.smartModbusSlave3.StopBits = System.IO.Ports.StopBits.One; - this.smartModbusSlave3.OnReadHoldingRegisters += new SmartX.SmartModbusSlave.ReadHoldingRegisterHandler(this.smartModbusSlave3_OnReadHoldingRegisters); - // - // smartModbusSlave4 - // - this.smartModbusSlave4.Buad_Rate = SmartX.SmartModbusSlave.BUADRATE.CBR_9600; - this.smartModbusSlave4.Parity = System.IO.Ports.Parity.None; - this.smartModbusSlave4.PortNo = SmartX.SmartModbusSlave.COMPORTNO.COM4; - this.smartModbusSlave4.ProtocolType = SmartX.SmartModbusSlave.PROTOCOL.RTU; - this.smartModbusSlave4.SlaveAddress = 1; - this.smartModbusSlave4.StopBits = System.IO.Ports.StopBits.One; - this.smartModbusSlave4.OnReadHoldingRegisters += new SmartX.SmartModbusSlave.ReadHoldingRegisterHandler(this.smartModbusSlave4_OnReadHoldingRegisters); - // // smartFileCheckLog // this.smartFileCheckLog.FilePathName = null; @@ -216,6 +188,11 @@ this.smartTimerUpdate.StartTime = ((long)(0)); this.smartTimerUpdate.Tick += new System.EventHandler(this.smartTimerUpdate_Tick); // + // timerEthernetPing + // + this.timerEthernetPing.Interval = 3000; + this.timerEthernetPing.Tick += new System.EventHandler(this.timerEthernetPing_Tick); + // // FormMain // this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); @@ -243,12 +220,10 @@ private SmartX.SmartSerialPort smartSerialPort3; public SmartX.SmartThread smartThread; public SmartX.SmartTCPMultiServer smartTCPMultiServer; - private SmartX.SmartModbusSlave smartModbusSlave1; - private SmartX.SmartModbusSlave smartModbusSlave3; - private SmartX.SmartModbusSlave smartModbusSlave4; public SmartX.SmartFile smartFileCheckLog; private System.Windows.Forms.Timer timeOut; private SmartX.SmartTimer smartTimerUpdate; + private System.Windows.Forms.Timer timerEthernetPing; } } diff --git a/ITC81DB_0H/Forms/FormMain.cs b/ITC81DB_0H/Forms/FormMain.cs index f61a17f..37f3c33 100644 --- a/ITC81DB_0H/Forms/FormMain.cs +++ b/ITC81DB_0H/Forms/FormMain.cs @@ -13,6 +13,8 @@ using System.Windows.Forms; using SmartX; using ITC81DB_0H.DialogForms; +using ITC81DB_0H.Controls; +using InModbus; namespace ITC81DB_0H.Forms { @@ -37,6 +39,9 @@ namespace ITC81DB_0H.Forms public double OverloadWeight; private int BLDCMotorIndex; private static int BLDCMotorMaxNum = 10; + public bool IsAlarmOccured; + public int UpdateValue; // Modbus - Update 될 때마다 +1 + public bool IsOPCModbusUsing; #region 통신관련 // OPT2 @@ -134,6 +139,10 @@ namespace ITC81DB_0H.Forms public UserGroup CurrentUserGroup; // Bacode public Barcode CurrentBarcode; + public Modbus Modbus; + // Modbus Data + public _30000_ModbusData Current30000ModbusData; + public _40000_ModbusData Current40000ModbusData; // 품목설정 데이터 public Collection CollectionProductItem; // 판정설정 데이터 @@ -153,6 +162,9 @@ namespace ITC81DB_0H.Forms private int HMCOM4_Step; private int HMEthernet_Step; + // OPC + private static int ModbusTotalBytes = 68; // 전체 bytes + // Ethernet private bool IsEthernetThreadStop; private bool IsEthernetTransferData; @@ -282,6 +294,13 @@ namespace ITC81DB_0H.Forms this.IsCurrentKeyKorean = false; this.OverloadWeight = 700.00; this.BLDCMotorIndex = 0; + this.IsAlarmOccured = false; + this.UpdateValue = 0; + this.IsOPCModbusUsing = false; + + this.Modbus = new Modbus(); + this.Current30000ModbusData = new _30000_ModbusData(); + this.Current40000ModbusData = new _40000_ModbusData(); #region 통신관련 this.CurrentOPT2COM1 = new SerialOPT2(); @@ -455,6 +474,19 @@ namespace ITC81DB_0H.Forms { this.EthernetClientDisconnect(); } + + if (this.SystemConfig2.EthernetCommMode != (int)DataStore.EthernetMode.f0_None) + { + switch (this.SystemConfig2.EthernetCommMode) + { + case (int)DataStore.EthernetMode.f16_OPC: + case (int)DataStore.EthernetMode.f22_Modbus_TCP: + this.ChildFormMainDisplay.MainBottomModbusIconAdd(true); + break; + default: + break; + } + } } private void CreateForm() { @@ -1140,6 +1172,43 @@ namespace ITC81DB_0H.Forms } } + private void UpdateScreen() + { + if (this.ChildFormMainDisplay.MainDisplayFeedback.IsUsingFeedback() == true) + { + this.UpdateFeedbackData(this.CurrentProductItem, this.CurrentSystemParameter2); + this.UpdateFeedbackDeviation(this.CurrentProductItem, this.CurrentSystemParameter2); + } + + if (this.CurrentSystemStatus.CurrentDisplay == DataStore.DisplayStore.MainDisplay) + { + if (this.ChildFormMainDisplay != null) + this.ChildFormMainDisplay.UpdateCurrentProductDisplay(this.CurrentSystemStatus.Equipment, this.CurrentProductItem, this.CurrentWeightData); + + this.ChildFormMainDisplay.UpdateModbusScreen(); + } + else if (this.CurrentSystemStatus.CurrentDisplay == DataStore.DisplayStore.SystemSorterSetting) + { + if (this.ChildFormMenu.CenterSystemSorterSetting != null) + this.ChildFormMenu.CenterSystemSorterSetting.UpdateCurrentProductDisplay(this.CurrentSystemStatus.Equipment, this.CurrentProductItem); + } + else if (this.CurrentSystemStatus.CurrentDisplay == DataStore.DisplayStore.SystemJudgmentAuto) + { + this.TransferData(CommunicationCommand.Stop, CommunicationID.MainBoard); + + if (this.ChildFormMenu != null) + this.ChildFormMenu.UpdateEquipmentStatusDisplay(this.CurrentSystemStatus.Equipment); + + this.ChildFormMenu.CenterSystemJudgmentManual.DisplayRefresh(this.CurrentSystemStatus); + this.ChildFormMenu.CenterSystemJudgmentManual.BringToFront(); + } + else + { + if (this.ChildFormMenu.CenterSystemJudgmentManual != null) + this.ChildFormMenu.CenterSystemJudgmentManual.UpdateCurrentProductDisplay(this.CurrentSystemStatus.Equipment, this.CurrentProductItem); + } + } + // 피드백 데이터(피드백 편차 변경 X) public void UpdateFeedbackData(ProductItem item, SystemParameter2 parameter) { @@ -2074,7 +2143,6 @@ namespace ITC81DB_0H.Forms this.ChildFormMainDisplay.DisplayRefresh(this.CurrentSystemStatus); this.smartForm.Show((int)DataStore.FormStore.FormMainDisplay); } - this.ChildFormMainDisplay.CurrentBottomMenuControlEnable(DataStore.EquipmentStatus.Stop); } else { @@ -2397,13 +2465,18 @@ namespace ITC81DB_0H.Forms } #endregion break; - case "4004": - if (response == DataStore.ResponseData.ACK) - this.TransferDataStream(CommunicationCommand.Read, CommunicationID.MainBoard, CommunicationAddress.ParameterRead4901, ""); - break; - case "4005": - if (response == DataStore.ResponseData.ACK) - this.TransferDataStream(CommunicationCommand.Read, CommunicationID.MainBoard, CommunicationAddress.ParameterRead4902, ""); + case "4907": + #region Value Assign + this.CurrentSystemParameter4.MainAutoZeroIsAutoZeroUsing = bool.Parse(receiveData.Substring(0, 4).Trim()); + this.CurrentSystemParameter4.MainAutoZeroPlusRange = receiveData.Substring(4, 7).Trim(); + this.CurrentSystemParameter4.MainAutoZeroMinusRange = receiveData.Substring(11, 7).Trim(); + this.CurrentSystemParameter4.MainAutoZeroVariate = receiveData.Substring(18, 4).Trim(); + #endregion + if (this.CurrentSystemStatus.CurrentDisplay == DataStore.DisplayStore.SystemAutoZero) + { + if (this.ChildFormMenu.CenterSystemAutoZero != null) + this.ChildFormMenu.CenterSystemAutoZero.UpdateZeroParameterDisplay(this.CurrentSystemParameter4); + } break; case "9006": if (response == DataStore.ResponseData.ACK) @@ -5145,15 +5218,15 @@ namespace ITC81DB_0H.Forms return sb.ToString(); } - private byte[] Transfer_22_Modbus() + public byte[] Transfer_22_Modbus_Write() { - byte[] madeData = new byte[TotalBytes]; - byte[] Length2Value = new byte[2]; + byte[] madeData = new byte[ModbusTotalBytes]; byte[] Length4Value = new byte[4]; double underValue = Helper.StringToWeight(this.CurrentProductItem.UnderRange, this.SystemConfig1.DecimalPlaces); double passValue = Helper.StringToWeight(this.CurrentProductItem.PassRange, this.SystemConfig1.DecimalPlaces); double overValue = Helper.StringToWeight(this.CurrentProductItem.OverRange, this.SystemConfig1.DecimalPlaces); + double tareValue = Helper.StringToWeight(this.CurrentProductItem.TareRange, this.SystemConfig1.DecimalPlaces); int equipmentStatus; if (this.CurrentSystemStatus.Equipment == DataStore.EquipmentStatus.Start) @@ -5161,6 +5234,12 @@ namespace ITC81DB_0H.Forms else equipmentStatus = 0; + int alarmStatus; + if (this.IsAlarmOccured == true) + alarmStatus = 1; + else + alarmStatus = 0; + int judgmentStatus; switch (this.CurrentWeightData.JudgmentStatus) { @@ -5184,61 +5263,796 @@ namespace ITC81DB_0H.Forms break; } - Length2Value = GetBytes(this.SystemConfig1.EquipmentID); - for (int i = 0; i < 2; i++) - madeData[i] = Length2Value[1 - i]; + Length4Value = GetBytes(this.UpdateValue); + for (int i = 0; i < 4; i++) + madeData[i] = Length4Value[3 - i]; - Length2Value = GetBytes(this.SystemConfig1.ProductNumber); - for (int i = 0; i < 2; i++) - madeData[2 + i] = Length2Value[1 - i]; - - Length4Value = GetBytes((Single)underValue); + Length4Value = GetBytes(this.SystemConfig1.EquipmentID); for (int i = 0; i < 4; i++) madeData[4 + i] = Length4Value[3 - i]; - Length4Value = GetBytes((Single)passValue); + Length4Value = GetBytes(this.SystemConfig1.ProductNumber); for (int i = 0; i < 4; i++) madeData[8 + i] = Length4Value[3 - i]; - Length4Value = GetBytes((Single)overValue); + Length4Value = GetBytes((Single)underValue); for (int i = 0; i < 4; i++) madeData[12 + i] = Length4Value[3 - i]; - Length4Value = GetBytes(this.CurrentWeightData.UnderCount); + Length4Value = GetBytes((Single)passValue); for (int i = 0; i < 4; i++) madeData[16 + i] = Length4Value[3 - i]; - Length4Value = GetBytes(this.CurrentWeightData.PassCount); + Length4Value = GetBytes((Single)overValue); for (int i = 0; i < 4; i++) madeData[20 + i] = Length4Value[3 - i]; - Length4Value = GetBytes(this.CurrentWeightData.OverCount); + Length4Value = GetBytes((Single)tareValue); for (int i = 0; i < 4; i++) madeData[24 + i] = Length4Value[3 - i]; - Length4Value = GetBytes(this.CurrentWeightData.OverCount + this.CurrentWeightData.UnderCount); + Length4Value = GetBytes(this.CurrentWeightData.UnderCount); for (int i = 0; i < 4; i++) madeData[28 + i] = Length4Value[3 - i]; - Length4Value = GetBytes(this.CurrentWeightData.ExNGCount); + Length4Value = GetBytes(this.CurrentWeightData.PassCount); for (int i = 0; i < 4; i++) madeData[32 + i] = Length4Value[3 - i]; - Length4Value = GetBytes(this.CurrentWeightData.TotalCount); + Length4Value = GetBytes(this.CurrentWeightData.OverCount); for (int i = 0; i < 4; i++) madeData[36 + i] = Length4Value[3 - i]; - Length2Value = GetBytes(judgmentStatus); - for (int i = 0; i < 2; i++) - madeData[40 + i] = Length2Value[1 - i]; + Length4Value = GetBytes(this.CurrentWeightData.OverCount + this.CurrentWeightData.UnderCount); + for (int i = 0; i < 4; i++) + madeData[40 + i] = Length4Value[3 - i]; + + Length4Value = GetBytes(this.CurrentWeightData.ExNGCount); + for (int i = 0; i < 4; i++) + madeData[44 + i] = Length4Value[3 - i]; + + Length4Value = GetBytes(this.CurrentWeightData.TotalCount); + for (int i = 0; i < 4; i++) + madeData[48 + i] = Length4Value[3 - i]; + + Length4Value = GetBytes(judgmentStatus); + for (int i = 0; i < 4; i++) + madeData[52 + i] = Length4Value[3 - i]; Length4Value = GetBytes((Single)this.CurrentWeightData.Weight); for (int i = 0; i < 4; i++) - madeData[42 + i] = Length4Value[3 - i]; + madeData[56 + i] = Length4Value[3 - i]; - Length2Value = GetBytes(equipmentStatus); - for (int i = 0; i < 2; i++) - madeData[46 + i] = Length2Value[1 - i]; + Length4Value = GetBytes(equipmentStatus); + for (int i = 0; i < 4; i++) + madeData[60 + i] = Length4Value[3 - i]; + + Length4Value = GetBytes(alarmStatus); + for (int i = 0; i < 4; i++) + madeData[64 + i] = Length4Value[3 - i]; + + return madeData; + } + private byte[] Transfer_22_Modbus_Read_RTU(byte[] readByte) + { + byte[] startAddressByte = new byte[2] { readByte[2], readByte[3] }; + byte[] numberOfRegisterByte = new byte[2] { readByte[4], readByte[5] }; + int startAddressInt; + int numberOfRegisterInt; + int madeDataIndex = 0; + byte[] length2Value = new byte[2]; + byte[] length4Value = new byte[4]; + + startAddressInt = Modbus.ToBigEndianAndInt(startAddressByte); + numberOfRegisterInt = Modbus.ToBigEndianAndInt(numberOfRegisterByte); + + byte[] madeData = new byte[numberOfRegisterInt * 2]; + + if (readByte[1] == ModbusFunctionCode.FunctionCode_03) + { + #region Read Holding Register(0x03) + for (int j = startAddressInt; j < startAddressInt + numberOfRegisterInt; j++) + { + switch (j) + { + #region Make data + case _40000_ModbusAddress._01_Clear: + length2Value = GetBytes(this.Current40000ModbusData._40011_Clear); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + case _40000_ModbusAddress._02_ClearResult: + length2Value = GetBytes(this.Current40000ModbusData._40012_ClearResult); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + case _40000_ModbusAddress._03_Operation: + length2Value = GetBytes(this.Current40000ModbusData._40013_Operation); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + case _40000_ModbusAddress._04_OperationResult: + length2Value = GetBytes(this.Current40000ModbusData._40014_OperationResult); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + case _40000_ModbusAddress._05_ProductChange_High: + length4Value = GetBytes(this.Current40000ModbusData._40015_ProductChange); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _40000_ModbusAddress._06_ProductChange_Low: + length4Value = GetBytes(this.Current40000ModbusData._40015_ProductChange); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _40000_ModbusAddress._07_ProductChangeResult: + length2Value = GetBytes(this.Current40000ModbusData._40017_ProductChangeResult); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + case _40000_ModbusAddress._08_UnderRange_High: + length4Value = GetBytes(this.Current40000ModbusData._40018_UnderRange); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _40000_ModbusAddress._09_UnderRange_Low: + length4Value = GetBytes(this.Current40000ModbusData._40018_UnderRange); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _40000_ModbusAddress._10_UnderRangeResult: + length2Value = GetBytes(this.Current40000ModbusData._40020_UnderRangeResult); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + case _40000_ModbusAddress._11_PassRange_High: + length4Value = GetBytes(this.Current40000ModbusData._40021_PassRange); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _40000_ModbusAddress._12_PassRange_Low: + length4Value = GetBytes(this.Current40000ModbusData._40021_PassRange); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _40000_ModbusAddress._13_PassRangeResult: + length2Value = GetBytes(this.Current40000ModbusData._40023_PassRangeResult); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + case _40000_ModbusAddress._14_OverRange_High: + length4Value = GetBytes(this.Current40000ModbusData._40024_OverRange); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _40000_ModbusAddress._15_OverRange_Low: + length4Value = GetBytes(this.Current40000ModbusData._40024_OverRange); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _40000_ModbusAddress._16_OverRangeResult: + length2Value = GetBytes(this.Current40000ModbusData._40026_OverRangeResult); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + case _40000_ModbusAddress._17_TareWeight_High: + length4Value = GetBytes(this.Current40000ModbusData._40027_TareWeight); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _40000_ModbusAddress._18_TareWeight_Low: + length4Value = GetBytes(this.Current40000ModbusData._40027_TareWeight); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _40000_ModbusAddress._19_TareWeightResult: + length2Value = GetBytes(this.Current40000ModbusData._40029_TareWeightResult); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + default: + break; + #endregion + } + madeDataIndex += 2; + } + #endregion + } + else if (readByte[1] == ModbusFunctionCode.FunctionCode_04) + { + #region Read Input Register(0x04) + double underValue = Helper.StringToWeight(this.CurrentProductItem.UnderRange, this.SystemConfig1.DecimalPlaces); + double passValue = Helper.StringToWeight(this.CurrentProductItem.PassRange, this.SystemConfig1.DecimalPlaces); + double overValue = Helper.StringToWeight(this.CurrentProductItem.OverRange, this.SystemConfig1.DecimalPlaces); + double tareValue = Helper.StringToWeight(this.CurrentProductItem.TareRange, this.SystemConfig1.DecimalPlaces); + + int equipmentStatus; + if (this.CurrentSystemStatus.Equipment == DataStore.EquipmentStatus.Start) + equipmentStatus = 1; + else + equipmentStatus = 0; + + int alarmStatus; + if (this.IsAlarmOccured == true) + alarmStatus = 1; + else + alarmStatus = 0; + + int judgmentStatus; + switch (this.CurrentWeightData.JudgmentStatus) + { + case DataStore.JudgmentStatus.Over: + judgmentStatus = 0; + break; + case DataStore.JudgmentStatus.Pass: + judgmentStatus = 1; + break; + case DataStore.JudgmentStatus.Under: + judgmentStatus = 2; + break; + case DataStore.JudgmentStatus.Metal: + judgmentStatus = 3; + break; + case DataStore.JudgmentStatus.Double: + judgmentStatus = 4; + break; + default: + judgmentStatus = 5; + break; + } + + for (int j = startAddressInt; j < startAddressInt + numberOfRegisterInt; j++) + { + switch (j) + { + #region Make data + case _30000_ModbusAddress._01_IsUpdate_High: + length4Value = GetBytes(this.UpdateValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._02_IsUpdate_Low: + length4Value = GetBytes(this.UpdateValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._03_EquipmentID_High: + length4Value = GetBytes(this.SystemConfig1.EquipmentID); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._04_EquipmentID_Low: + length4Value = GetBytes(this.SystemConfig1.EquipmentID); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._05_ProductNo_High: + length4Value = GetBytes(this.SystemConfig1.ProductNumber); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._06_ProductNo_Low: + length4Value = GetBytes(this.SystemConfig1.ProductNumber); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._07_UnderValue_High: + length4Value = GetBytes((Single)underValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._08_UnderValue_Low: + length4Value = GetBytes((Single)underValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._09_PassValue_High: + length4Value = GetBytes((Single)passValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._10_PassValue_Low: + length4Value = GetBytes((Single)passValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._11_OverValue_High: + length4Value = GetBytes((Single)overValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._12_OverValue_Low: + length4Value = GetBytes((Single)overValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._13_TareValue_High: + length4Value = GetBytes((Single)tareValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._14_TareValue_Low: + length4Value = GetBytes((Single)tareValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._15_UnderCount_High: + length4Value = GetBytes(this.CurrentWeightData.UnderCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._16_UnderCount_Low: + length4Value = GetBytes(this.CurrentWeightData.UnderCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._17_PassCount_High: + length4Value = GetBytes(this.CurrentWeightData.PassCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._18_PassCount_Low: + length4Value = GetBytes(this.CurrentWeightData.PassCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._19_OverCount_High: + length4Value = GetBytes(this.CurrentWeightData.OverCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._20_OverCount_Low: + length4Value = GetBytes(this.CurrentWeightData.OverCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._21_NGCount_High: + length4Value = GetBytes(this.CurrentWeightData.OverCount + this.CurrentWeightData.UnderCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._22_NGCount_Low: + length4Value = GetBytes(this.CurrentWeightData.OverCount + this.CurrentWeightData.UnderCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._23_ExNGCount_High: + length4Value = GetBytes(this.CurrentWeightData.ExNGCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._24_ExNGCount_Low: + length4Value = GetBytes(this.CurrentWeightData.ExNGCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._25_TotalCount_High: + length4Value = GetBytes(this.CurrentWeightData.TotalCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._26_TotalCount_Low: + length4Value = GetBytes(this.CurrentWeightData.TotalCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._27_Grade_High: + length4Value = GetBytes(judgmentStatus); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._28_Grade_Low: + length4Value = GetBytes(judgmentStatus); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._29_Weight_High: + if (this.CurrentSystemStatus.Equipment == DataStore.EquipmentStatus.Stop) + length4Value = GetBytes((Single)0.0); + else + length4Value = GetBytes((Single)this.CurrentWeightData.Weight); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._30_Weight_Low: + if (this.CurrentSystemStatus.Equipment == DataStore.EquipmentStatus.Stop) + length4Value = GetBytes((Single)0.0); + else + length4Value = GetBytes((Single)this.CurrentWeightData.Weight); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._31_OperationStatus_High: + length4Value = GetBytes(equipmentStatus); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._32_OperationStatus_Low: + length4Value = GetBytes(equipmentStatus); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._33_AlarmStatus_High: + length4Value = GetBytes(alarmStatus); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._34_AlarmStatus_Low: + length4Value = GetBytes(alarmStatus); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + default: + break; + #endregion + } + madeDataIndex += 2; + } + #endregion + } + + return madeData; + } + private byte[] Transfer_22_Modbus_Read_TCP(byte[] readByte) + { + byte[] startAddressByte = new byte[2] { readByte[8], readByte[9] }; + byte[] numberOfRegisterByte = new byte[2] { readByte[10], readByte[11] }; + int startAddressInt; + int numberOfRegisterInt; + int madeDataIndex = 0; + byte[] length2Value = new byte[2]; + byte[] length4Value = new byte[4]; + + startAddressInt = Modbus.ToBigEndianAndInt(startAddressByte); + numberOfRegisterInt = Modbus.ToBigEndianAndInt(numberOfRegisterByte); + + byte[] madeData = new byte[numberOfRegisterInt * 2]; + + if (readByte[7] == ModbusFunctionCode.FunctionCode_03) + { + #region Read Holding Register(0x03) + for (int j = startAddressInt; j < startAddressInt + numberOfRegisterInt; j++) + { + switch (j) + { + #region Make data + case _40000_ModbusAddress._01_Clear: + length2Value = GetBytes(this.Current40000ModbusData._40011_Clear); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + case _40000_ModbusAddress._02_ClearResult: + length2Value = GetBytes(this.Current40000ModbusData._40012_ClearResult); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + case _40000_ModbusAddress._03_Operation: + length2Value = GetBytes(this.Current40000ModbusData._40013_Operation); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + case _40000_ModbusAddress._04_OperationResult: + length2Value = GetBytes(this.Current40000ModbusData._40014_OperationResult); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + case _40000_ModbusAddress._05_ProductChange_High: + length4Value = GetBytes(this.Current40000ModbusData._40015_ProductChange); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _40000_ModbusAddress._06_ProductChange_Low: + length4Value = GetBytes(this.Current40000ModbusData._40015_ProductChange); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _40000_ModbusAddress._07_ProductChangeResult: + length2Value = GetBytes(this.Current40000ModbusData._40017_ProductChangeResult); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + case _40000_ModbusAddress._08_UnderRange_High: + length4Value = GetBytes(this.Current40000ModbusData._40018_UnderRange); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _40000_ModbusAddress._09_UnderRange_Low: + length4Value = GetBytes(this.Current40000ModbusData._40018_UnderRange); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _40000_ModbusAddress._10_UnderRangeResult: + length2Value = GetBytes(this.Current40000ModbusData._40020_UnderRangeResult); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + case _40000_ModbusAddress._11_PassRange_High: + length4Value = GetBytes(this.Current40000ModbusData._40021_PassRange); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _40000_ModbusAddress._12_PassRange_Low: + length4Value = GetBytes(this.Current40000ModbusData._40021_PassRange); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _40000_ModbusAddress._13_PassRangeResult: + length2Value = GetBytes(this.Current40000ModbusData._40023_PassRangeResult); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + case _40000_ModbusAddress._14_OverRange_High: + length4Value = GetBytes(this.Current40000ModbusData._40024_OverRange); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _40000_ModbusAddress._15_OverRange_Low: + length4Value = GetBytes(this.Current40000ModbusData._40024_OverRange); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _40000_ModbusAddress._16_OverRangeResult: + length2Value = GetBytes(this.Current40000ModbusData._40026_OverRangeResult); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + case _40000_ModbusAddress._17_TareWeight_High: + length4Value = GetBytes(this.Current40000ModbusData._40027_TareWeight); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _40000_ModbusAddress._18_TareWeight_Low: + length4Value = GetBytes(this.Current40000ModbusData._40027_TareWeight); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _40000_ModbusAddress._19_TareWeightResult: + length2Value = GetBytes(this.Current40000ModbusData._40029_TareWeightResult); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length2Value[1 - i]; + break; + default: + break; + #endregion + } + madeDataIndex += 2; + } + #endregion + } + else if (readByte[7] == ModbusFunctionCode.FunctionCode_04) + { + #region Read Input Register(0x04) + double underValue = Helper.StringToWeight(this.CurrentProductItem.UnderRange, this.SystemConfig1.DecimalPlaces); + double passValue = Helper.StringToWeight(this.CurrentProductItem.PassRange, this.SystemConfig1.DecimalPlaces); + double overValue = Helper.StringToWeight(this.CurrentProductItem.OverRange, this.SystemConfig1.DecimalPlaces); + double tareValue = Helper.StringToWeight(this.CurrentProductItem.TareRange, this.SystemConfig1.DecimalPlaces); + double weight = this.CurrentWeightData.Weight; + + int equipmentStatus; + if (this.CurrentSystemStatus.Equipment == DataStore.EquipmentStatus.Start) + equipmentStatus = 1; + else + equipmentStatus = 0; + + int alarmStatus; + if (this.IsAlarmOccured == true) + alarmStatus = 1; + else + alarmStatus = 0; + + int judgmentStatus; + switch (this.CurrentWeightData.JudgmentStatus) + { + case DataStore.JudgmentStatus.Over: + judgmentStatus = 0; + break; + case DataStore.JudgmentStatus.Pass: + judgmentStatus = 1; + break; + case DataStore.JudgmentStatus.Under: + judgmentStatus = 2; + break; + case DataStore.JudgmentStatus.Metal: + judgmentStatus = 3; + break; + case DataStore.JudgmentStatus.Double: + judgmentStatus = 4; + break; + default: + judgmentStatus = 5; + break; + } + + for (int j = startAddressInt; j < startAddressInt + numberOfRegisterInt; j++) + { + switch (j) + { + #region Make data + case _30000_ModbusAddress._01_IsUpdate_High: + length4Value = GetBytes(this.UpdateValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._02_IsUpdate_Low: + length4Value = GetBytes(this.UpdateValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._03_EquipmentID_High: + length4Value = GetBytes(this.SystemConfig1.EquipmentID); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._04_EquipmentID_Low: + length4Value = GetBytes(this.SystemConfig1.EquipmentID); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._05_ProductNo_High: + length4Value = GetBytes(this.SystemConfig1.ProductNumber); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._06_ProductNo_Low: + length4Value = GetBytes(this.SystemConfig1.ProductNumber); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._07_UnderValue_High: + length4Value = GetBytes((Single)underValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._08_UnderValue_Low: + length4Value = GetBytes((Single)underValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._09_PassValue_High: + length4Value = GetBytes((Single)passValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._10_PassValue_Low: + length4Value = GetBytes((Single)passValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._11_OverValue_High: + length4Value = GetBytes((Single)overValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._12_OverValue_Low: + length4Value = GetBytes((Single)overValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._13_TareValue_High: + length4Value = GetBytes((Single)tareValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._14_TareValue_Low: + length4Value = GetBytes((Single)tareValue); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._15_UnderCount_High: + length4Value = GetBytes(this.CurrentWeightData.UnderCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._16_UnderCount_Low: + length4Value = GetBytes(this.CurrentWeightData.UnderCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._17_PassCount_High: + length4Value = GetBytes(this.CurrentWeightData.PassCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._18_PassCount_Low: + length4Value = GetBytes(this.CurrentWeightData.PassCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._19_OverCount_High: + length4Value = GetBytes(this.CurrentWeightData.OverCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._20_OverCount_Low: + length4Value = GetBytes(this.CurrentWeightData.OverCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._21_NGCount_High: + length4Value = GetBytes(this.CurrentWeightData.OverCount + this.CurrentWeightData.UnderCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._22_NGCount_Low: + length4Value = GetBytes(this.CurrentWeightData.OverCount + this.CurrentWeightData.UnderCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._23_ExNGCount_High: + length4Value = GetBytes(this.CurrentWeightData.ExNGCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._24_ExNGCount_Low: + length4Value = GetBytes(this.CurrentWeightData.ExNGCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._25_TotalCount_High: + length4Value = GetBytes(this.CurrentWeightData.TotalCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._26_TotalCount_Low: + length4Value = GetBytes(this.CurrentWeightData.TotalCount); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._27_Grade_High: + length4Value = GetBytes(judgmentStatus); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._28_Grade_Low: + length4Value = GetBytes(judgmentStatus); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._29_Weight_High: + if (this.CurrentSystemStatus.Equipment == DataStore.EquipmentStatus.Stop) + length4Value = GetBytes((Single)0.0); + else + length4Value = GetBytes((Single)this.CurrentWeightData.Weight); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._30_Weight_Low: + if (this.CurrentSystemStatus.Equipment == DataStore.EquipmentStatus.Stop) + length4Value = GetBytes((Single)0.0); + else + length4Value = GetBytes((Single)this.CurrentWeightData.Weight); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._31_OperationStatus_High: + length4Value = GetBytes(equipmentStatus); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._32_OperationStatus_Low: + length4Value = GetBytes(equipmentStatus); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + case _30000_ModbusAddress._33_AlarmStatus_High: + length4Value = GetBytes(alarmStatus); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[3 - i]; + break; + case _30000_ModbusAddress._34_AlarmStatus_Low: + length4Value = GetBytes(alarmStatus); + for (int i = 0; i < 2; i++) + madeData[madeDataIndex + i] = length4Value[1 - i]; + break; + default: + break; + #endregion + } + madeDataIndex += 2; + } + #endregion + } return madeData; } @@ -5936,6 +6750,14 @@ namespace ITC81DB_0H.Forms this.smartSerialPort3.Open(); } + public void ChangeSerialCOM3ReceiveDetect(SmartSerialPort.RECEIVEDETECTTYPE detectType) + { + this.smartSerialPort3.ReceiveDetect = detectType; + } + public void ChangeSerialCOM3FrameBufferSize(uint size) + { + this.smartSerialPort3.FrameBufferSize = size; + } #endregion #region Serial COM4 public void OpenSerialCOM4() @@ -6079,252 +6901,803 @@ namespace ITC81DB_0H.Forms byte[] byteArray = BitConverter.GetBytes(argument); return byteArray; } - #endregion - #region Modbus Slave COM1 - public void OpenModbusSlaveCOM1() + + /// + /// OPC, Modbus - 항목 업데이트 시마다 +1 + /// + public void Update30000ModbusItem() { - if (this.SystemConfig1.SerialCOM1Mode == 0) + if (this.IsOPCModbusUsing == false) return; - this.CloseModbusCOM1(); - this.CloseModbusSlaveCOM1(); + if (this.UpdateValue > 999999999) + this.UpdateValue = 0; + else + this.UpdateValue++; - if (this.SystemConfig1.SerialCOM1Mode == (int)DataStore.SerialMode.f16_OPC) + this.Current30000ModbusData.IsUpdate = this.UpdateValue; + this.Current30000ModbusData.EquipmentID = this.SystemConfig1.EquipmentID; + this.Current30000ModbusData.ProductNo = this.SystemConfig1.ProductNumber; + + this.Current30000ModbusData.UnderValue = Helper.StringToWeight(this.CurrentProductItem.UnderRange, this.SystemConfig1.DecimalPlaces); + this.Current30000ModbusData.PassValue = Helper.StringToWeight(this.CurrentProductItem.PassRange, this.SystemConfig1.DecimalPlaces); + this.Current30000ModbusData.OverValue = Helper.StringToWeight(this.CurrentProductItem.OverRange, this.SystemConfig1.DecimalPlaces); + this.Current30000ModbusData.TareValue = Helper.StringToWeight(this.CurrentProductItem.TareRange, this.SystemConfig1.DecimalPlaces); + + this.Current30000ModbusData.UnderCount = (UInt32)this.CurrentWeightData.UnderCount; + this.Current30000ModbusData.PassCount = (UInt32)this.CurrentWeightData.PassCount; + this.Current30000ModbusData.OverCount = (UInt32)this.CurrentWeightData.OverCount; + this.Current30000ModbusData.NGCount = (UInt32)this.CurrentWeightData.UnderCount + (UInt32)this.CurrentWeightData.OverCount; + this.Current30000ModbusData.ExNGCount = (UInt32)this.CurrentWeightData.ExNGCount; + this.Current30000ModbusData.TotalCount = (UInt32)this.CurrentWeightData.TotalCount; + + switch (this.CurrentWeightData.JudgmentStatus) { - this.smartModbusSlave1.SlaveAddress = 1; - this.smartModbusSlave1.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_9600; - this.smartModbusSlave1.Start(); + case DataStore.JudgmentStatus.Over: + this.Current30000ModbusData.Grade = 0; + break; + case DataStore.JudgmentStatus.Pass: + this.Current30000ModbusData.Grade = 1; + break; + case DataStore.JudgmentStatus.Under: + this.Current30000ModbusData.Grade = 2; + break; + case DataStore.JudgmentStatus.Metal: + this.Current30000ModbusData.Grade = 3; + break; + case DataStore.JudgmentStatus.Double: + this.Current30000ModbusData.Grade = 4; + break; + default: + this.Current30000ModbusData.Grade = 5; + break; } - else if (this.SystemConfig1.SerialCOM1Mode == (int)DataStore.SerialMode.f22_Modbus_RTU) + + if (this.CurrentSystemStatus.Equipment == DataStore.EquipmentStatus.Start) { - this.smartModbusSlave1.SlaveAddress = this.SystemConfig2.ModbusRTUSlaveIDCOM1; - switch (this.SystemConfig1.SerialCOM1BaudRate) + this.Current30000ModbusData.Weight = this.CurrentWeightData.Weight; + this.Current30000ModbusData.OperationStatus = 1; + } + else + { + this.Current30000ModbusData.Weight = 0.0; + this.Current30000ModbusData.OperationStatus = 0; + } + + if (this.IsAlarmOccured == true) + this.Current30000ModbusData.AlarmStatus = 1; + else + this.Current30000ModbusData.AlarmStatus = 0; + + this.ChildFormMainDisplay.MainDisplayModbus.UpdateData(this.Current30000ModbusData); + } + /// + /// Modbus RTU - Write Multiple Register에 대한 Manage 메소드 + /// + /// 전송받은 Modbus Data + public void ReceiveModbusRTUWriteManager(byte[] readByte) + { + int startAddressInt; + int numberOfRegisterInt; + float floatNum; + byte[] startAddressByte = new byte[2] { readByte[2], readByte[3] }; + byte[] numberOfRegisterByte = new byte[2] { readByte[4], readByte[5] }; + + int madeDataIndex = 0; + byte[] Length2Value = new byte[2]; + byte[] Length4Value = new byte[4]; + byte[] Length12Value = new byte[12]; + byte[] Length14Value = new byte[14]; + + startAddressInt = Modbus.ToBigEndianAndInt(startAddressByte); + numberOfRegisterInt = Modbus.ToBigEndianAndInt(numberOfRegisterByte); + + try + { + for (int j = startAddressInt; j < startAddressInt + numberOfRegisterInt; j++) { - case 0: - this.smartModbusSlave1.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_9600; + switch (j) + { + #region Change data + case _40000_ModbusAddress._01_Clear: + #region 40011_소거 요청 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[7 + madeDataIndex + i]; + this.Current40000ModbusData._40011_Clear = Modbus.ToBigEndianAndInt(Length2Value); + + if (this.Current40000ModbusData._40011_Clear == 1) + { + try + { + this.ChildFormMainDisplay.Clear(); + this.Current40000ModbusData._40011_Clear = 0; + + // 성공 + this.Current40000ModbusData._40012_ClearResult = 1; + } + catch + { + // 실패 + this.Current40000ModbusData._40012_ClearResult = 2; + } + } + #endregion + break; + case _40000_ModbusAddress._02_ClearResult: + #region 40012_소거 요청 결과 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[7 + madeDataIndex + i]; + this.Current40000ModbusData._40012_ClearResult = Modbus.ToBigEndianAndInt(Length2Value); + #endregion + break; + case _40000_ModbusAddress._03_Operation: + #region 40013_운전/정지 요청, 1:운전/2:정지 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[7 + madeDataIndex + i]; + this.Current40000ModbusData._40013_Operation = Modbus.ToBigEndianAndInt(Length2Value); + + if (this.Current40000ModbusData._40013_Operation != 0) + { + try + { + if (this.Current40000ModbusData._40013_Operation == 1) + { + this.TransferData(CommunicationCommand.Start, CommunicationID.MainBoard); + } + else + { + this.TransferData(CommunicationCommand.Stop, CommunicationID.MainBoard); + } + + this.Current40000ModbusData._40013_Operation = 0; + + // 성공 + this.Current40000ModbusData._40014_OperationResult = 1; + } + catch + { + // 실패 + this.Current40000ModbusData._40014_OperationResult = 2; + } + } + #endregion + break; + case _40000_ModbusAddress._04_OperationResult: + #region 40014_운전/정지 요청 수행 결과 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[7 + madeDataIndex + i]; + this.Current40000ModbusData._40014_OperationResult = Modbus.ToBigEndianAndInt(Length2Value); + #endregion + break; + case _40000_ModbusAddress._05_ProductChange_High: + #region 40015_품번 변경 요청 + for (int i = 0; i < 4; i++) + Length4Value[i] = readByte[7 + madeDataIndex + i]; + this.Current40000ModbusData._40015_ProductChange = Modbus.ToBigEndianAndInt(Length4Value); + + if (this.Current40000ModbusData._40015_ProductChange != 0) + { + try + { + if (this.CurrentSystemStatus.Equipment == DataStore.EquipmentStatus.Stop) + { + if (this.Current40000ModbusData._40015_ProductChange >= 1 + && this.Current40000ModbusData._40015_ProductChange <= 1000) + this.ChildFormMainDisplay.ChangeProductNumber(this.Current40000ModbusData._40015_ProductChange); + + this.Current40000ModbusData._40015_ProductChange = 0; + + // 성공 + this.Current40000ModbusData._40017_ProductChangeResult = 1; + } + else + { + this.Current40000ModbusData._40015_ProductChange = 0; + this.Current40000ModbusData._40017_ProductChangeResult = 2; + } + } + catch + { + // 실패 + this.Current40000ModbusData._40017_ProductChangeResult = 2; + } + } + #endregion + break; + case _40000_ModbusAddress._07_ProductChangeResult: + #region 40017_품번 변경 요청 수행 결과 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[7 + madeDataIndex + i]; + this.Current40000ModbusData._40017_ProductChangeResult = Modbus.ToBigEndianAndInt(Length2Value); + #endregion + break; + case _40000_ModbusAddress._08_UnderRange_High: + #region 40018_Under 중량설정 요청 + for (int i = 0; i < 4; i++) + Length4Value[i] = readByte[7 + madeDataIndex + i]; + floatNum = Modbus.ToBigEndianAndFloat(Length4Value); + this.Current40000ModbusData._40018_UnderRange = + int.Parse(Helper.DoubleToString((double)floatNum, this.SystemConfig1.DecimalPlaces).Replace(".", "")); + + if (this.Current40000ModbusData._40018_UnderRange >= 0 && this.Current40000ModbusData._40018_UnderRange <= 99999) + { + try + { + this.CurrentProductItem.UnderRange = this.Current40000ModbusData._40018_UnderRange.ToString(); + + this.SaveProductFile(this.CurrentProductItem, this.SystemConfig1.ProductNumber - 1); + this.TransferCurrentProductItem(this.CurrentProductItem); + + this.Update30000ModbusItem(); + this.UpdateScreen(); + + // 초기값으로 설정해놓기 + this.Current40000ModbusData._40018_UnderRange = 0; + + // 성공 + this.Current40000ModbusData._40020_UnderRangeResult = 1; + } + catch + { + // 실패 + this.Current40000ModbusData._40020_UnderRangeResult = 2; + } + } + else + { + // 실패 + this.Current40000ModbusData._40020_UnderRangeResult = 2; + } + #endregion + break; + case _40000_ModbusAddress._10_UnderRangeResult: + #region 40020_Under 중량설정 요청 수행 결과 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[7 + madeDataIndex + i]; + this.Current40000ModbusData._40020_UnderRangeResult = Modbus.ToBigEndianAndInt(Length2Value); + #endregion + break; + case _40000_ModbusAddress._11_PassRange_High: + #region 40021_Pass 중량설정 요청 + for (int i = 0; i < 4; i++) + Length4Value[i] = readByte[7 + madeDataIndex + i]; + floatNum = Modbus.ToBigEndianAndFloat(Length4Value); + this.Current40000ModbusData._40021_PassRange = + int.Parse(Helper.DoubleToString((double)floatNum, this.SystemConfig1.DecimalPlaces).Replace(".", "")); + + if (this.Current40000ModbusData._40021_PassRange >= 0 && this.Current40000ModbusData._40021_PassRange <= 99999) + { + try + { + string value = ""; + int digit = 0, temp = 0; + int oldUnderRangeDeviation = this.CurrentProductItem.UnderRangeDeviation; + int oldOverRangeDeviation = this.CurrentProductItem.OverRangeDeviation; + + this.CurrentProductItem.PassRange = this.Current40000ModbusData._40021_PassRange.ToString(); + + #region UnderRange + temp = this.CurrentProductItem.PassRangeInt + oldUnderRangeDeviation; + if (temp < 0) + value = "0"; + else + value = temp.ToString(); + + this.CurrentProductItem.UnderRange = value; + #endregion + + #region OverRange + temp = this.CurrentProductItem.PassRangeInt + oldOverRangeDeviation; + if (temp > 99999) + value = "99999"; + else + value = temp.ToString(); + + this.CurrentProductItem.OverRange = value; + #endregion + + this.SaveProductFile(this.CurrentProductItem, this.SystemConfig1.ProductNumber - 1); + this.TransferCurrentProductItem(this.CurrentProductItem); + + this.Update30000ModbusItem(); + this.UpdateScreen(); + + // 초기값으로 설정해놓기 + this.Current40000ModbusData._40021_PassRange = 0; + + // 성공 + this.Current40000ModbusData._40023_PassRangeResult = 1; + } + catch + { + // 실패 + this.Current40000ModbusData._40023_PassRangeResult = 2; + } + } + else + { + // 실패 + this.Current40000ModbusData._40023_PassRangeResult = 2; + } + #endregion + break; + case _40000_ModbusAddress._13_PassRangeResult: + #region 40023_Pass 중량설정 요청 수행 결과 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[7 + madeDataIndex + i]; + this.Current40000ModbusData._40023_PassRangeResult = Modbus.ToBigEndianAndInt(Length2Value); + #endregion + break; + case _40000_ModbusAddress._14_OverRange_High: + #region 40024_Over 중량설정 요청 + for (int i = 0; i < 4; i++) + Length4Value[i] = readByte[7 + madeDataIndex + i]; + floatNum = Modbus.ToBigEndianAndFloat(Length4Value); + this.Current40000ModbusData._40024_OverRange = + int.Parse(Helper.DoubleToString((double)floatNum, this.SystemConfig1.DecimalPlaces).Replace(".", "")); + + if (this.Current40000ModbusData._40024_OverRange >= 0 && this.Current40000ModbusData._40024_OverRange <= 99999) + { + try + { + this.CurrentProductItem.OverRange = this.Current40000ModbusData._40024_OverRange.ToString(); + + this.SaveProductFile(this.CurrentProductItem, this.SystemConfig1.ProductNumber - 1); + this.TransferCurrentProductItem(this.CurrentProductItem); + + this.Update30000ModbusItem(); + this.UpdateScreen(); + + // 초기값으로 설정해놓기 + this.Current40000ModbusData._40024_OverRange = 0; + + // 성공 + this.Current40000ModbusData._40026_OverRangeResult = 1; + } + catch + { + // 실패 + this.Current40000ModbusData._40026_OverRangeResult = 2; + } + } + else + { + // 실패 + this.Current40000ModbusData._40026_OverRangeResult = 2; + } + #endregion + break; + case _40000_ModbusAddress._16_OverRangeResult: + #region 40026_Over 중량설정 요청 수행 결과 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[7 + madeDataIndex + i]; + this.Current40000ModbusData._40026_OverRangeResult = Modbus.ToBigEndianAndInt(Length2Value); + #endregion + break; + case _40000_ModbusAddress._17_TareWeight_High: + #region 40027_Tare 중량설정 요청 + for (int i = 0; i < 4; i++) + Length4Value[i] = readByte[7 + madeDataIndex + i]; + floatNum = Modbus.ToBigEndianAndFloat(Length4Value); + this.Current40000ModbusData._40027_TareWeight = + int.Parse(Helper.DoubleToString((double)floatNum, this.SystemConfig1.DecimalPlaces).Replace(".", "")); + + if (this.Current40000ModbusData._40027_TareWeight >= 0 && this.Current40000ModbusData._40027_TareWeight <= 99999) + { + try + { + this.CurrentProductItem.TareRange = this.Current40000ModbusData._40027_TareWeight.ToString(); + + this.SaveProductFile(this.CurrentProductItem, this.SystemConfig1.ProductNumber - 1); + this.TransferCurrentProductItem(this.CurrentProductItem); + + this.Update30000ModbusItem(); + this.UpdateScreen(); + + // 초기값으로 설정해놓기 + this.Current40000ModbusData._40027_TareWeight = 0; + + // 성공 + this.Current40000ModbusData._40029_TareWeightResult = 1; + } + catch + { + // 실패 + this.Current40000ModbusData._40029_TareWeightResult = 2; + } + } + else + { + // 실패 + this.Current40000ModbusData._40029_TareWeightResult = 2; + } + #endregion + break; + case _40000_ModbusAddress._19_TareWeightResult: + #region 40029_Tare 중량설정 요청 수행 결과 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[7 + madeDataIndex + i]; + this.Current40000ModbusData._40029_TareWeightResult = Modbus.ToBigEndianAndInt(Length2Value); + #endregion + break; + default: + break; + #endregion + } + madeDataIndex += 2; + } + } + catch + { + + } + } + /// + /// Modbus TCP - Write Multiple Register에 대한 Manage 메소드 + /// + /// 전송받은 Modbus Data + public void ReceiveModbusTCPWriteManager(byte[] readByte) + { + int startAddressInt; + int numberOfRegisterInt; + float floatNum; + byte[] startAddressByte = new byte[2] { readByte[8], readByte[9] }; + byte[] numberOfRegisterByte = new byte[2] { readByte[10], readByte[11] }; + + int madeDataIndex = 0; + byte[] Length2Value = new byte[2]; + byte[] Length4Value = new byte[4]; + byte[] Length12Value = new byte[12]; + byte[] Length14Value = new byte[14]; + + startAddressInt = Modbus.ToBigEndianAndInt(startAddressByte); + numberOfRegisterInt = Modbus.ToBigEndianAndInt(numberOfRegisterByte); + + for (int j = startAddressInt; j < startAddressInt + numberOfRegisterInt; j++) + { + switch (j) + { + #region Change data + case _40000_ModbusAddress._01_Clear: + #region 40011_소거 요청 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[13 + madeDataIndex + i]; + this.Current40000ModbusData._40011_Clear = Modbus.ToBigEndianAndInt(Length2Value); + + if (this.Current40000ModbusData._40011_Clear == 1) + { + try + { + this.ChildFormMainDisplay.Clear(); + this.Current40000ModbusData._40011_Clear = 0; + + // 성공 + this.Current40000ModbusData._40012_ClearResult = 1; + } + catch + { + // 실패 + this.Current40000ModbusData._40012_ClearResult = 2; + } + } + #endregion break; - case 1: - this.smartModbusSlave1.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_19200; + case _40000_ModbusAddress._02_ClearResult: + #region 40012_소거 요청 결과 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[13 + madeDataIndex + i]; + this.Current40000ModbusData._40012_ClearResult = Modbus.ToBigEndianAndInt(Length2Value); + #endregion break; - case 2: - this.smartModbusSlave1.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_38400; + case _40000_ModbusAddress._03_Operation: + #region 40013_운전/정지 요청, 1:운전/2:정지 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[13 + madeDataIndex + i]; + this.Current40000ModbusData._40013_Operation = Modbus.ToBigEndianAndInt(Length2Value); + + if (this.Current40000ModbusData._40013_Operation != 0) + { + try + { + if (this.Current40000ModbusData._40013_Operation == 1) + { + this.TransferData(CommunicationCommand.Start, CommunicationID.MainBoard); + } + else + { + this.TransferData(CommunicationCommand.Stop, CommunicationID.MainBoard); + } + + this.Current40000ModbusData._40013_Operation = 0; + + // 성공 + this.Current40000ModbusData._40014_OperationResult = 1; + } + catch + { + // 실패 + this.Current40000ModbusData._40014_OperationResult = 2; + } + } + #endregion break; - case 3: - this.smartModbusSlave1.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_57600; + case _40000_ModbusAddress._04_OperationResult: + #region 40014_운전/정지 요청 수행 결과 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[13 + madeDataIndex + i]; + this.Current40000ModbusData._40014_OperationResult = Modbus.ToBigEndianAndInt(Length2Value); + #endregion break; - case 4: - this.smartModbusSlave1.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_115200; + case _40000_ModbusAddress._05_ProductChange_High: + #region 40015_품번 변경 요청 + for (int i = 0; i < 4; i++) + Length4Value[i] = readByte[13 + madeDataIndex + i]; + this.Current40000ModbusData._40015_ProductChange = Modbus.ToBigEndianAndInt(Length4Value); + + if (this.Current40000ModbusData._40015_ProductChange != 0) + { + try + { + if (this.CurrentSystemStatus.Equipment == DataStore.EquipmentStatus.Stop) + { + if (this.Current40000ModbusData._40015_ProductChange >= 1 + && this.Current40000ModbusData._40015_ProductChange <= 1000) + this.ChildFormMainDisplay.ChangeProductNumber(this.Current40000ModbusData._40015_ProductChange); + + this.Current40000ModbusData._40015_ProductChange = 0; + + // 성공 + this.Current40000ModbusData._40017_ProductChangeResult = 1; + } + else + { + this.Current40000ModbusData._40015_ProductChange = 0; + this.Current40000ModbusData._40017_ProductChangeResult = 2; + } + } + catch + { + // 실패 + this.Current40000ModbusData._40017_ProductChangeResult = 2; + } + } + #endregion + break; + case _40000_ModbusAddress._07_ProductChangeResult: + #region 40017_품번 변경 요청 수행 결과 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[13 + madeDataIndex + i]; + this.Current40000ModbusData._40017_ProductChangeResult = Modbus.ToBigEndianAndInt(Length2Value); + #endregion + break; + case _40000_ModbusAddress._08_UnderRange_High: + #region 40018_Under 중량설정 요청 + for (int i = 0; i < 4; i++) + Length4Value[i] = readByte[13 + madeDataIndex + i]; + floatNum = Modbus.ToBigEndianAndFloat(Length4Value); + this.Current40000ModbusData._40018_UnderRange = + int.Parse(Helper.DoubleToString((double)floatNum, this.SystemConfig1.DecimalPlaces).Replace(".", "")); + + if (this.Current40000ModbusData._40018_UnderRange >= 0 && this.Current40000ModbusData._40018_UnderRange <= 99999) + { + try + { + this.CurrentProductItem.UnderRange = this.Current40000ModbusData._40018_UnderRange.ToString(); + + this.SaveProductFile(this.CurrentProductItem, this.SystemConfig1.ProductNumber - 1); + this.TransferCurrentProductItem(this.CurrentProductItem); + + this.Update30000ModbusItem(); + this.UpdateScreen(); + + // 초기값으로 설정해놓기 + this.Current40000ModbusData._40018_UnderRange = 0; + + // 성공 + this.Current40000ModbusData._40020_UnderRangeResult = 1; + } + catch + { + // 실패 + this.Current40000ModbusData._40020_UnderRangeResult = 2; + } + } + else + { + // 실패 + this.Current40000ModbusData._40020_UnderRangeResult = 2; + } + #endregion + break; + case _40000_ModbusAddress._10_UnderRangeResult: + #region 40020_Under 중량설정 요청 수행 결과 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[13 + madeDataIndex + i]; + this.Current40000ModbusData._40020_UnderRangeResult = Modbus.ToBigEndianAndInt(Length2Value); + #endregion + break; + case _40000_ModbusAddress._11_PassRange_High: + #region 40021_Pass 중량설정 요청 + for (int i = 0; i < 4; i++) + Length4Value[i] = readByte[13 + madeDataIndex + i]; + floatNum = Modbus.ToBigEndianAndFloat(Length4Value); + this.Current40000ModbusData._40021_PassRange = + int.Parse(Helper.DoubleToString((double)floatNum, this.SystemConfig1.DecimalPlaces).Replace(".", "")); + + if (this.Current40000ModbusData._40021_PassRange >= 0 && this.Current40000ModbusData._40021_PassRange <= 99999) + { + try + { + string value = ""; + int digit = 0, temp = 0; + int oldUnderRangeDeviation = this.CurrentProductItem.UnderRangeDeviation; + int oldOverRangeDeviation = this.CurrentProductItem.OverRangeDeviation; + + this.CurrentProductItem.PassRange = this.Current40000ModbusData._40021_PassRange.ToString(); + + #region UnderRange + temp = this.CurrentProductItem.PassRangeInt + oldUnderRangeDeviation; + if (temp < 0) + value = "0"; + else + value = temp.ToString(); + + this.CurrentProductItem.UnderRange = value; + #endregion + + #region OverRange + temp = this.CurrentProductItem.PassRangeInt + oldOverRangeDeviation; + if (temp > 99999) + value = "99999"; + else + value = temp.ToString(); + + this.CurrentProductItem.OverRange = value; + #endregion + + this.SaveProductFile(this.CurrentProductItem, this.SystemConfig1.ProductNumber - 1); + this.TransferCurrentProductItem(this.CurrentProductItem); + + this.Update30000ModbusItem(); + this.UpdateScreen(); + + // 초기값으로 설정해놓기 + this.Current40000ModbusData._40021_PassRange = 0; + + // 성공 + this.Current40000ModbusData._40023_PassRangeResult = 1; + } + catch + { + // 실패 + this.Current40000ModbusData._40023_PassRangeResult = 2; + } + } + else + { + // 실패 + this.Current40000ModbusData._40023_PassRangeResult = 2; + } + #endregion + break; + case _40000_ModbusAddress._13_PassRangeResult: + #region 40023_Pass 중량설정 요청 수행 결과 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[13 + madeDataIndex + i]; + this.Current40000ModbusData._40023_PassRangeResult = Modbus.ToBigEndianAndInt(Length2Value); + #endregion + break; + case _40000_ModbusAddress._14_OverRange_High: + #region 40024_Over 중량설정 요청 + for (int i = 0; i < 4; i++) + Length4Value[i] = readByte[13 + madeDataIndex + i]; + floatNum = Modbus.ToBigEndianAndFloat(Length4Value); + this.Current40000ModbusData._40024_OverRange = + int.Parse(Helper.DoubleToString((double)floatNum, this.SystemConfig1.DecimalPlaces).Replace(".", "")); + + if (this.Current40000ModbusData._40024_OverRange >= 0 && this.Current40000ModbusData._40024_OverRange <= 99999) + { + try + { + this.CurrentProductItem.OverRange = this.Current40000ModbusData._40024_OverRange.ToString(); + + this.SaveProductFile(this.CurrentProductItem, this.SystemConfig1.ProductNumber - 1); + this.TransferCurrentProductItem(this.CurrentProductItem); + + this.Update30000ModbusItem(); + this.UpdateScreen(); + + // 초기값으로 설정해놓기 + this.Current40000ModbusData._40024_OverRange = 0; + + // 성공 + this.Current40000ModbusData._40026_OverRangeResult = 1; + } + catch + { + // 실패 + this.Current40000ModbusData._40026_OverRangeResult = 2; + } + } + else + { + // 실패 + this.Current40000ModbusData._40026_OverRangeResult = 2; + } + #endregion + break; + case _40000_ModbusAddress._16_OverRangeResult: + #region 40026_Over 중량설정 요청 수행 결과 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[13 + madeDataIndex + i]; + this.Current40000ModbusData._40026_OverRangeResult = Modbus.ToBigEndianAndInt(Length2Value); + #endregion + break; + case _40000_ModbusAddress._17_TareWeight_High: + #region 40027_Tare 중량설정 요청 + for (int i = 0; i < 4; i++) + Length4Value[i] = readByte[13 + madeDataIndex + i]; + floatNum = Modbus.ToBigEndianAndFloat(Length4Value); + this.Current40000ModbusData._40027_TareWeight = + int.Parse(Helper.DoubleToString((double)floatNum, this.SystemConfig1.DecimalPlaces).Replace(".", "")); + + if (this.Current40000ModbusData._40027_TareWeight >= 0 && this.Current40000ModbusData._40027_TareWeight <= 99999) + { + try + { + this.CurrentProductItem.TareRange = this.Current40000ModbusData._40027_TareWeight.ToString(); + + this.SaveProductFile(this.CurrentProductItem, this.SystemConfig1.ProductNumber - 1); + this.TransferCurrentProductItem(this.CurrentProductItem); + + this.Update30000ModbusItem(); + this.UpdateScreen(); + + // 초기값으로 설정해놓기 + this.Current40000ModbusData._40027_TareWeight = 0; + + // 성공 + this.Current40000ModbusData._40029_TareWeightResult = 1; + } + catch + { + // 실패 + this.Current40000ModbusData._40029_TareWeightResult = 2; + } + } + else + { + // 실패 + this.Current40000ModbusData._40029_TareWeightResult = 2; + } + #endregion + break; + case _40000_ModbusAddress._19_TareWeightResult: + #region 40029_Tare 중량설정 요청 수행 결과 + for (int i = 0; i < 2; i++) + Length2Value[i] = readByte[13 + madeDataIndex + i]; + this.Current40000ModbusData._40029_TareWeightResult = Modbus.ToBigEndianAndInt(Length2Value); + #endregion break; default: - this.smartModbusSlave1.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_9600; break; + #endregion } - - this.smartModbusSlave1.Start(); + madeDataIndex += 2; } } - public void CloseModbusSlaveCOM1() - { - if (this.smartModbusSlave1.IsOpen == true) - this.smartModbusSlave1.End(); - } - #endregion - #region Modbus Slave COM3 - public void OpenModbusSlaveCOM3() - { - if (this.SystemConfig1.SerialCOM3Mode == 0) - return; - - this.CloseModbusCOM3(); - this.CloseModbusSlaveCOM3(); - - if (this.SystemConfig1.SerialCOM3Mode == (int)DataStore.SerialMode.f16_OPC) - { - this.smartModbusSlave3.SlaveAddress = 1; - this.smartModbusSlave3.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_9600; - this.smartModbusSlave3.Start(); - } - else if (this.SystemConfig1.SerialCOM3Mode == (int)DataStore.SerialMode.f22_Modbus_RTU) - { - this.smartModbusSlave3.SlaveAddress = this.SystemConfig2.ModbusRTUSlaveIDCOM3; - switch (this.SystemConfig1.SerialCOM3BaudRate) - { - case 0: - this.smartModbusSlave3.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_9600; - break; - case 1: - this.smartModbusSlave3.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_19200; - break; - case 2: - this.smartModbusSlave3.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_38400; - break; - case 3: - this.smartModbusSlave3.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_57600; - break; - case 4: - this.smartModbusSlave3.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_115200; - break; - default: - this.smartModbusSlave3.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_9600; - break; - } - this.smartModbusSlave3.Start(); - } - } - public void CloseModbusSlaveCOM3() - { - if (this.smartModbusSlave3.IsOpen == true) - this.smartModbusSlave3.End(); - } - #endregion - #region Modbus Slave COM4 - public void OpenModbusSlaveCOM4() - { - if (this.SystemConfig1.SerialCOM4Mode == 0) - return; - - this.CloseModbusCOM4(); - this.CloseModbusSlaveCOM4(); - - if (this.SystemConfig1.SerialCOM4Mode == (int)DataStore.SerialMode.f16_OPC) - { - this.smartModbusSlave4.SlaveAddress = 1; - this.smartModbusSlave4.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_9600; - this.smartModbusSlave4.Start(); - } - else if (this.SystemConfig1.SerialCOM4Mode == (int)DataStore.SerialMode.f22_Modbus_RTU) - { - this.smartModbusSlave4.SlaveAddress = this.SystemConfig2.ModbusRTUSlaveIDCOM4; - switch (this.SystemConfig1.SerialCOM4BaudRate) - { - case 0: - this.smartModbusSlave4.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_9600; - break; - case 1: - this.smartModbusSlave4.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_19200; - break; - case 2: - this.smartModbusSlave4.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_38400; - break; - case 3: - this.smartModbusSlave4.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_57600; - break; - case 4: - this.smartModbusSlave4.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_115200; - break; - default: - this.smartModbusSlave4.Buad_Rate = SmartModbusSlave.BUADRATE.CBR_9600; - break; - } - this.smartModbusSlave4.Start(); - } - } - public void CloseModbusSlaveCOM4() - { - if (this.smartModbusSlave4.IsOpen == true) - this.smartModbusSlave4.End(); - } - #endregion - #region Modbus COM1 - public void OpenModbusCOM1() - { - if (this.SystemConfig1.SerialCOM1Mode == 0) - return; - - if (this.SystemConfig1.SerialCOM1Mode == 16) - { - this.CloseModbusCOM1(); - this.smartModbusSlave1.Start(); - } - } - public void CloseModbusCOM1() - { - if (this.smartModbusSlave1.IsOpen == true) - this.smartModbusSlave1.End(); - } - #endregion - #region Modbus COM3 - public void OpenModbusCOM3() - { - if (this.SystemConfig1.SerialCOM3Mode == 0) - return; - - if (this.SystemConfig1.SerialCOM3Mode == 16) - { - this.CloseModbusCOM3(); - this.smartModbusSlave3.Start(); - } - } - public void CloseModbusCOM3() - { - if (this.smartModbusSlave3.IsOpen == true) - this.smartModbusSlave3.End(); - } - #endregion - #region Modbus COM4 - public void OpenModbusCOM4() - { - if (this.SystemConfig1.SerialCOM4Mode == 0) - return; - - if (this.SystemConfig1.SerialCOM4Mode == 16) - { - this.CloseModbusCOM4(); - this.smartModbusSlave4.Start(); - } - } - public void CloseModbusCOM4() - { - if (this.smartModbusSlave4.IsOpen == true) - this.smartModbusSlave4.End(); - } #endregion #region Ethernet - //private string EthernetWeightDataFormat(SystemConfigurationItem1 system, WeightData weight, ProductItem product) - //{ - // StringBuilder sb = new StringBuilder(); - - // sb.Append((char)0x02); - // sb.Append(string.Format("IN{0:000}", system.EquipmentID)); - // sb.Append(string.Format("{0:0000}", product.Number)); - - // sb.Append(Helper.StringZeroFillDigits6(Helper.StringToDecimalPlaces(product.UnderRange, system.DecimalPlaces))); - // sb.Append(Helper.StringZeroFillDigits6(Helper.StringToDecimalPlaces(product.PassRange, system.DecimalPlaces))); - // sb.Append(Helper.StringZeroFillDigits6(Helper.StringToDecimalPlaces(product.OverRange, system.DecimalPlaces))); - - // switch (weight.JudgmentStatus) - // { - // case DataStore.JudgmentStatus.Empty: - // break; - // case DataStore.JudgmentStatus.Under: - // sb.Append("U"); - // break; - // case DataStore.JudgmentStatus.Pass: - // sb.Append("P"); - // break; - // case DataStore.JudgmentStatus.Over: - // sb.Append("O"); - // break; - // case DataStore.JudgmentStatus.Double: - // sb.Append("D"); - // break; - // case DataStore.JudgmentStatus.Metal: - // sb.Append("M"); - // break; - // case DataStore.JudgmentStatus.ExNg: - // sb.Append("E"); - // break; - // default: - // sb.Append("E"); - // break; - // } - - // sb.Append(Helper.StringZeroFillDigits6(Helper.DoubleToString(weight.Weight, system.DecimalPlaces))); - // sb.Append((char)0x03); - - // return sb.ToString(); - //} + public void IsUsingTimerEthernetPing(bool bValue) + { + if (this.SystemConfig2.IsEthernetPingTimer == true) + { + this.timerEthernetPing.Enabled = bValue; + } + else + this.timerEthernetPing.Enabled = false; + } #region Client public void EthernetClientConnect() @@ -6350,6 +7723,8 @@ namespace ITC81DB_0H.Forms cpClientThread.IsBackground = true; cpClientThread.Start(); + + this.IsUsingTimerEthernetPing(true); } catch { @@ -6358,6 +7733,8 @@ namespace ITC81DB_0H.Forms } public void EthernetClientDisconnect() { + this.IsUsingTimerEthernetPing(false); + this.IsEthernetThreadStop = true; this.DelegateUISeverStatus(false); if (null != this.EthernetStmReader) @@ -6549,6 +7926,7 @@ namespace ITC81DB_0H.Forms { if (this.smartTCPMultiServer.IsStart == false) { + this.IsUsingTimerEthernetPing(true); this.ChildFormMenu.CenterConfiEthernet.DisplayLabelLocalPort(false); this.smartTCPMultiServer.Port = this.SystemConfig2.EthernetLocalPort; this.smartTCPMultiServer.Start(); @@ -6558,6 +7936,7 @@ namespace ITC81DB_0H.Forms { if (this.smartTCPMultiServer.IsStart == true) { + this.IsUsingTimerEthernetPing(false); this.ChildFormMenu.CenterConfiEthernet.DisplayLabelLocalPort(true); this.smartTCPMultiServer.Stop(); } @@ -7091,11 +8470,11 @@ namespace ITC81DB_0H.Forms structItem.DummyInt2 = 0; structItem.DummyInt3 = 0; structItem.DummyInt4 = 0; - structItem.DummyInt5 = 0; - structItem.DummyInt6 = 0; - structItem.DummyInt7 = 0; - structItem.DummyInt8 = 0; - structItem.DummyInt9 = 0; + structItem.ModbusTCPStartAddress = 0; + structItem.ModbusRTUStartAddressCOM1 = 0; + structItem.ModbusRTUStartAddressCOM3 = 0; + structItem.ModbusRTUStartAddressCOM4 = 0; + structItem.ModbusTCPSelectFunction = this.SystemConfig2.ModbusTCPSelectFunction; structItem.BLDCTotalMotorNum = this.SystemConfig2.BLDCTotalMotorNum; structItem.ModbusRTUSelectFunction = this.SystemConfig2.ModbusRTUSelectFunction; structItem.ModbusRTUSlaveIDCOM1 = this.SystemConfig2.ModbusRTUSlaveIDCOM1; @@ -7196,11 +8575,11 @@ namespace ITC81DB_0H.Forms structItem.DummyInt2 = 0; structItem.DummyInt3 = 0; structItem.DummyInt4 = 0; - structItem.DummyInt5 = 0; - structItem.DummyInt6 = 0; - structItem.DummyInt7 = 0; - structItem.DummyInt8 = 0; - structItem.DummyInt9 = 0; + structItem.ModbusTCPStartAddress = 0; + structItem.ModbusRTUStartAddressCOM1 = 0; + structItem.ModbusRTUStartAddressCOM3 = 0; + structItem.ModbusRTUStartAddressCOM4 = 0; + structItem.ModbusTCPSelectFunction = item.ModbusTCPSelectFunction; structItem.BLDCTotalMotorNum = item.BLDCTotalMotorNum; structItem.ModbusRTUSelectFunction = item.ModbusRTUSelectFunction; structItem.ModbusRTUSlaveIDCOM1 = item.ModbusRTUSlaveIDCOM1; @@ -7322,6 +8701,8 @@ namespace ITC81DB_0H.Forms this.SystemConfig2.IsBypassDirectionPass = structItem.IsBypassDirectionPass; this.SystemConfig2.IsCommunicationOption = structItem.IsCommunicationOption; + this.SystemConfig2.ModbusTCPSelectFunction = structItem.ModbusTCPSelectFunction; + this.SystemConfig2.ModbusRTUSelectFunction = structItem.ModbusRTUSelectFunction; this.SystemConfig2.ModbusRTUSlaveIDCOM1 = structItem.ModbusRTUSlaveIDCOM1; this.SystemConfig2.ModbusRTUSlaveIDCOM3 = structItem.ModbusRTUSlaveIDCOM3; @@ -7915,8 +9296,8 @@ namespace ITC81DB_0H.Forms this.LoadSystemParameter4File(ref sItem); sb.Append(Helper.StringZeroFillDigits4(sItem.LCDAutoZeroIsAutoZeroUsing.ToString())); // 자동영점사용여부(4) - sb.Append(Helper.StringZeroFillDigits4(sItem.LCDAutoZeroPlusRange)); // 자동영점+범위(4) - sb.Append(Helper.StringZeroFillDigits4(sItem.LCDAutoZeroMinusRange)); // 자동영점-범위(4) + sb.Append(Helper.StringZeroFillDigits7(sItem.LCDAutoZeroPlusRange)); // 자동영점+범위(7) + sb.Append(Helper.StringZeroFillDigits7(sItem.LCDAutoZeroMinusRange)); // 자동영점-범위(7) sb.Append(Helper.StringZeroFillDigits4(sItem.LCDAutoZeroVariate)); // 자동영점변량(4) sb.Append("0000"); // Dummy1(4) sb.Append("0000"); // Dummy2(4) @@ -7928,6 +9309,16 @@ namespace ITC81DB_0H.Forms sb.Append("0000"); // Dummy8(4) sb.Append("0000"); // Dummy9(4) sb.Append("0000"); // Dummy10(4) + sb.Append("0000"); // Dummy11(4) + sb.Append("0000"); // Dummy12(4) + sb.Append("0000"); // Dummy13(4) + sb.Append("0000"); // Dummy14(4) + sb.Append("0000"); // Dummy15(4) + sb.Append("0000"); // Dummy16(4) + sb.Append("0000"); // Dummy17(4) + sb.Append("0000"); // Dummy18(4) + sb.Append("0000"); // Dummy19(4) + sb.Append("0000"); // Dummy20(4) this.TransferDataStream(CommunicationCommand.Write, CommunicationID.MainBoard, CommunicationAddress.SystemParameterWrite4, sb.ToString()); } @@ -8107,6 +9498,18 @@ namespace ITC81DB_0H.Forms this.TransferDataStream(CommunicationCommand.Write, ID, CommunicationAddress.BLDCMotorSetting, sb.ToString()); } + public void TransferCurrentProductItem(ProductItem pItem) + { + StringBuilder sb = new StringBuilder(); + + sb.Append(Helper.StringZeroFillDigits7(pItem.UnderRange)); + sb.Append(Helper.StringZeroFillDigits7(pItem.PassRange)); + sb.Append(Helper.StringZeroFillDigits7(pItem.OverRange)); + sb.Append(Helper.StringZeroFillDigits7(pItem.TareRange)); + sb.Append(Helper.StringZeroFillDigits4(this.SystemConfig1.ProductNumber.ToString())); + + this.TransferDataStream(CommunicationCommand.Write, CommunicationID.MainBoard, CommunicationAddress.ParameterWeightSetting, sb.ToString()); + } #endregion #region SystemParameter1 private void CreateSystemParameter1File() @@ -10513,18 +11916,56 @@ namespace ITC81DB_0H.Forms // 메인 통신 OPEN this.OpenSmartUartLink(); - // COM1 OPEN - this.OpenSerialCOM1(); - // COM3 OPEN - this.OpenSerialCOM3(); - // COM4 OPEN - this.OpenSerialCOM4(); - // Modbus COM1 OPEN - this.OpenModbusCOM1(); - // Modbus COM3 OPEN - this.OpenModbusCOM3(); - // Modbus COM4 OPEN - this.OpenModbusCOM4(); + + #region Communication + if (this.SystemConfig1.SerialCOM1Mode != (int)DataStore.SerialMode.f0_None) + { + switch (this.SystemConfig1.SerialCOM1Mode) + { + case (int)DataStore.SerialMode.f16_OPC: + case (int)DataStore.SerialMode.f22_Modbus_RTU: + this.ChildFormMainDisplay.MainBottomModbusIconAdd(true); + break; + default: + break; + } + + // COM1 OPEN + this.OpenSerialCOM1(); + } + + if (this.SystemConfig1.SerialCOM3Mode != (int)DataStore.SerialMode.f0_None) + { + switch (this.SystemConfig1.SerialCOM3Mode) + { + case (int)DataStore.SerialMode.f16_OPC: + case (int)DataStore.SerialMode.f22_Modbus_RTU: + this.ChildFormMainDisplay.MainBottomModbusIconAdd(true); + break; + default: + break; + } + + // COM3 OPEN + this.OpenSerialCOM3(); + } + + if (this.SystemConfig1.SerialCOM4Mode != (int)DataStore.SerialMode.f0_None) + { + switch (this.SystemConfig1.SerialCOM4Mode) + { + case (int)DataStore.SerialMode.f16_OPC: + case (int)DataStore.SerialMode.f22_Modbus_RTU: + this.ChildFormMainDisplay.MainBottomModbusIconAdd(true); + break; + default: + break; + } + + // COM4 OPEN + this.OpenSerialCOM4(); + } + #endregion // Write SystemParameter1 this.TransferParameter1(); @@ -10534,7 +11975,7 @@ namespace ITC81DB_0H.Forms this.SmartSplashProgramLoad.Finish(); this.smartForm.Show((int)DataStore.FormStore.FormMainDisplay); - this.ChildFormMainDisplay.CurrentBottomMenuControlEnable(DataStore.EquipmentStatus.Stop); + this.ChildFormMainDisplay.CurrentBottomMenuControlEnable(); // Mouse On //this.smartForm.Mode = SmartForm.RUNMODE.DEVELOPER; //this.smartForm.MouseCursor = SmartForm.OnOff.ON; @@ -10695,6 +12136,143 @@ namespace ITC81DB_0H.Forms } #endregion break; + case (int)DataStore.SerialMode.f16_OPC: + #region OPC + try + { + byte[] responseData; + byte errorCheck = this.Modbus.CheckRequestDataErrorRTU(readByte, ModbusFunctionCode.FunctionCode_04); + + if (errorCheck == 0x00) + responseData = this.Modbus.MakeRTU04ResponseData(this.Transfer_22_Modbus_Read_RTU(readByte), this.SystemConfig2.ModbusRTUSlaveIDCOM1); + else + responseData = this.Modbus.MakeRTU04ErrorResponseData(errorCheck, this.SystemConfig2.ModbusRTUSlaveIDCOM1); + + this.TransferSerialCOM1(responseData); + + // 로그 + if (this.IsCommunicationLogOpen == true) + this.smartFileCommunicationLog.WriteString(string.Format("Send COM1 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(responseData))); + } + catch + { + } + #endregion + break; + case (int)DataStore.SerialMode.f22_Modbus_RTU: + #region Modbus RTU + this.ChildFormMainDisplay.MainDisplayModbus.UpdateReceiveCount(); + + if (this.SystemConfig2.ModbusRTUSlaveIDCOM1 != Convert.ToInt32(readByte[0])) + return; + + if (readByte[1] == 0x03) // Read Holding Register + { + #region Read Holding Register + try + { + byte[] responseData; + byte errorCheck = this.Modbus.CheckRequestDataErrorRTU(readByte, ModbusFunctionCode.FunctionCode_03); + + if (errorCheck == 0x00) + responseData = this.Modbus.MakeRTUResponseData(this.Transfer_22_Modbus_Read_RTU(readByte), this.SystemConfig2.ModbusRTUSlaveIDCOM1, ModbusFunctionCode.FunctionCode_03); + else + responseData = this.Modbus.MakeRTUErrorResponseData(errorCheck, this.SystemConfig2.ModbusRTUSlaveIDCOM1, ModbusFunctionCode.FunctionCode_03); + + this.TransferSerialCOM1(responseData); + + // 로그 + if (this.IsCommunicationLogOpen == true) + { + this.smartFileCommunicationLog.WriteString(string.Format("Receive COM1 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(readByte))); + this.smartFileCommunicationLog.WriteString(string.Format("Send COM1 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(responseData))); + } + } + catch + { + } + #endregion + } + else if (readByte[1] == 0x10) // Write Multiple Register + { + #region Write Multiple Register + try + { + byte[] errorResponseData = new byte[5]; + byte[] responseData = new byte[8]; + byte[] crc; + byte errorCheck = this.Modbus.CheckRequestDataErrorRTU(readByte, ModbusFunctionCode.FunctionCode_16); + + if (errorCheck == 0x00) + { + for (int i = 0; i < 6; i++) + responseData[i] = readByte[i]; + + crc = this.Modbus.MakeRTUCRC(responseData, responseData.Length - 2); + for (int i = 0; i < 2; i++) + responseData[6 + i] = crc[i]; + + this.TransferSerialCOM1(responseData); + + this.ReceiveModbusRTUWriteManager(readByte); + } + else + { + errorResponseData[0] = readByte[0]; + errorResponseData[1] = 0x90; + errorResponseData[2] = errorCheck; + + crc = this.Modbus.MakeRTUCRC(errorResponseData, errorResponseData.Length - 2); + for (int i = 0; i < 2; i++) + errorResponseData[3 + i] = crc[i]; + + this.TransferSerialCOM1(errorResponseData); + } + + // 로그 + if (this.IsCommunicationLogOpen == true) + { + this.smartFileCommunicationLog.WriteString(string.Format("Receive COM1 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(readByte))); + this.smartFileCommunicationLog.WriteString(string.Format("Send COM1 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(responseData))); + } + } + catch + { + } + #endregion + } + else // Read Input Register(0x04) + { + if (this.SystemConfig2.ModbusRTUSelectFunction == (int)DataStore.ModbusFunction._04_ReadInputRegister) + { + #region Read Input Register + try + { + byte[] responseData; + byte errorCheck = this.Modbus.CheckRequestDataErrorRTU(readByte, ModbusFunctionCode.FunctionCode_04); + + if (errorCheck == 0x00) + responseData = this.Modbus.MakeRTU04ResponseData(this.Transfer_22_Modbus_Read_RTU(readByte), this.SystemConfig2.ModbusRTUSlaveIDCOM1); + else + responseData = this.Modbus.MakeRTU04ErrorResponseData(errorCheck, this.SystemConfig2.ModbusRTUSlaveIDCOM1); + + this.TransferSerialCOM1(responseData); + + // 로그 + if (this.IsCommunicationLogOpen == true) + { + this.smartFileCommunicationLog.WriteString(string.Format("Receive COM1 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(readByte))); + this.smartFileCommunicationLog.WriteString(string.Format("Send COM1 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(responseData))); + } + } + catch + { + } + #endregion + } + } + #endregion + break; default: break; } @@ -10869,6 +12447,143 @@ namespace ITC81DB_0H.Forms } #endregion break; + case (int)DataStore.SerialMode.f16_OPC: + #region OPC + try + { + byte[] responseData; + byte errorCheck = this.Modbus.CheckRequestDataErrorRTU(readByte, ModbusFunctionCode.FunctionCode_04); + + if (errorCheck == 0x00) + responseData = this.Modbus.MakeRTU04ResponseData(this.Transfer_22_Modbus_Read_RTU(readByte), this.SystemConfig2.ModbusRTUSlaveIDCOM3); + else + responseData = this.Modbus.MakeRTU04ErrorResponseData(errorCheck, this.SystemConfig2.ModbusRTUSlaveIDCOM3); + + this.TransferSerialCOM3(responseData); + + // 로그 + if (this.IsCommunicationLogOpen == true) + this.smartFileCommunicationLog.WriteString(string.Format("Send COM3 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(responseData))); + } + catch + { + } + #endregion + break; + case (int)DataStore.SerialMode.f22_Modbus_RTU: + #region Modbus RTU + this.ChildFormMainDisplay.MainDisplayModbus.UpdateReceiveCount(); + + if (this.SystemConfig2.ModbusRTUSlaveIDCOM3 != Convert.ToInt32(readByte[0])) + return; + + if (readByte[1] == 0x03) // Read Holding Register + { + #region Read Holding Register + try + { + byte[] responseData; + byte errorCheck = this.Modbus.CheckRequestDataErrorRTU(readByte, ModbusFunctionCode.FunctionCode_03); + + if (errorCheck == 0x00) + responseData = this.Modbus.MakeRTUResponseData(this.Transfer_22_Modbus_Read_RTU(readByte), this.SystemConfig2.ModbusRTUSlaveIDCOM3, ModbusFunctionCode.FunctionCode_03); + else + responseData = this.Modbus.MakeRTUErrorResponseData(errorCheck, this.SystemConfig2.ModbusRTUSlaveIDCOM3, ModbusFunctionCode.FunctionCode_03); + + this.TransferSerialCOM3(responseData); + + // 로그 + if (this.IsCommunicationLogOpen == true) + { + this.smartFileCommunicationLog.WriteString(string.Format("Receive COM3 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(readByte))); + this.smartFileCommunicationLog.WriteString(string.Format("Send COM3 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(responseData))); + } + } + catch + { + } + #endregion + } + else if (readByte[1] == 0x10) // Write Multiple Register + { + #region Write Multiple Register + try + { + byte[] errorResponseData = new byte[5]; + byte[] responseData = new byte[8]; + byte[] crc; + byte errorCheck = this.Modbus.CheckRequestDataErrorRTU(readByte, ModbusFunctionCode.FunctionCode_16); + + if (errorCheck == 0x00) + { + for (int i = 0; i < 6; i++) + responseData[i] = readByte[i]; + + crc = this.Modbus.MakeRTUCRC(responseData, responseData.Length - 2); + for (int i = 0; i < 2; i++) + responseData[6 + i] = crc[i]; + + this.TransferSerialCOM3(responseData); + + this.ReceiveModbusRTUWriteManager(readByte); + } + else + { + errorResponseData[0] = readByte[0]; + errorResponseData[1] = 0x90; + errorResponseData[2] = errorCheck; + + crc = this.Modbus.MakeRTUCRC(errorResponseData, errorResponseData.Length - 2); + for (int i = 0; i < 2; i++) + errorResponseData[3 + i] = crc[i]; + + this.TransferSerialCOM3(errorResponseData); + } + + // 로그 + if (this.IsCommunicationLogOpen == true) + { + this.smartFileCommunicationLog.WriteString(string.Format("Receive COM3 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(readByte))); + this.smartFileCommunicationLog.WriteString(string.Format("Send COM3 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(responseData))); + } + } + catch + { + } + #endregion + } + else // Read Input Register(0x04) + { + if (this.SystemConfig2.ModbusRTUSelectFunction == (int)DataStore.ModbusFunction._04_ReadInputRegister) + { + #region Read Input Register + try + { + byte[] responseData; + byte errorCheck = this.Modbus.CheckRequestDataErrorRTU(readByte, ModbusFunctionCode.FunctionCode_04); + + if (errorCheck == 0x00) + responseData = this.Modbus.MakeRTU04ResponseData(this.Transfer_22_Modbus_Read_RTU(readByte), this.SystemConfig2.ModbusRTUSlaveIDCOM3); + else + responseData = this.Modbus.MakeRTU04ErrorResponseData(errorCheck, this.SystemConfig2.ModbusRTUSlaveIDCOM3); + + this.TransferSerialCOM3(responseData); + + // 로그 + if (this.IsCommunicationLogOpen == true) + { + this.smartFileCommunicationLog.WriteString(string.Format("Receive COM3 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(readByte))); + this.smartFileCommunicationLog.WriteString(string.Format("Send COM3 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(responseData))); + } + } + catch + { + } + #endregion + } + } + #endregion + break; default: break; } @@ -11074,52 +12789,148 @@ namespace ITC81DB_0H.Forms } #endregion break; + case (int)DataStore.SerialMode.f16_OPC: + #region OPC + try + { + byte[] responseData; + byte errorCheck = this.Modbus.CheckRequestDataErrorRTU(readByte, ModbusFunctionCode.FunctionCode_04); + + if (errorCheck == 0x00) + responseData = this.Modbus.MakeRTU04ResponseData(this.Transfer_22_Modbus_Read_RTU(readByte), this.SystemConfig2.ModbusRTUSlaveIDCOM4); + else + responseData = this.Modbus.MakeRTU04ErrorResponseData(errorCheck, this.SystemConfig2.ModbusRTUSlaveIDCOM4); + + this.TransferSerialCOM4(responseData); + + // 로그 + if (this.IsCommunicationLogOpen == true) + this.smartFileCommunicationLog.WriteString(string.Format("Send COM4 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(responseData))); + } + catch + { + } + #endregion + break; + case (int)DataStore.SerialMode.f22_Modbus_RTU: + #region Modbus RTU + this.ChildFormMainDisplay.MainDisplayModbus.UpdateReceiveCount(); + + if (this.SystemConfig2.ModbusRTUSlaveIDCOM4 != Convert.ToInt32(readByte[0])) + return; + + if (readByte[1] == 0x03) // Read Holding Register + { + #region Read Holding Register + try + { + byte[] responseData; + byte errorCheck = this.Modbus.CheckRequestDataErrorRTU(readByte, ModbusFunctionCode.FunctionCode_03); + + if (errorCheck == 0x00) + responseData = this.Modbus.MakeRTUResponseData(this.Transfer_22_Modbus_Read_RTU(readByte), this.SystemConfig2.ModbusRTUSlaveIDCOM4, ModbusFunctionCode.FunctionCode_03); + else + responseData = this.Modbus.MakeRTUErrorResponseData(errorCheck, this.SystemConfig2.ModbusRTUSlaveIDCOM4, ModbusFunctionCode.FunctionCode_03); + + this.TransferSerialCOM4(responseData); + + // 로그 + if (this.IsCommunicationLogOpen == true) + { + this.smartFileCommunicationLog.WriteString(string.Format("Receive COM4 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(readByte))); + this.smartFileCommunicationLog.WriteString(string.Format("Send COM4 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(responseData))); + } + } + catch + { + } + #endregion + } + else if (readByte[1] == 0x10) // Write Multiple Register + { + #region Write Multiple Register + try + { + byte[] errorResponseData = new byte[5]; + byte[] responseData = new byte[8]; + byte[] crc; + byte errorCheck = this.Modbus.CheckRequestDataErrorRTU(readByte, ModbusFunctionCode.FunctionCode_16); + + if (errorCheck == 0x00) + { + for (int i = 0; i < 6; i++) + responseData[i] = readByte[i]; + + crc = this.Modbus.MakeRTUCRC(responseData, responseData.Length - 2); + for (int i = 0; i < 2; i++) + responseData[6 + i] = crc[i]; + + this.TransferSerialCOM4(responseData); + + this.ReceiveModbusRTUWriteManager(readByte); + } + else + { + errorResponseData[0] = readByte[0]; + errorResponseData[1] = 0x90; + errorResponseData[2] = errorCheck; + + crc = this.Modbus.MakeRTUCRC(errorResponseData, errorResponseData.Length - 2); + for (int i = 0; i < 2; i++) + errorResponseData[3 + i] = crc[i]; + + this.TransferSerialCOM4(errorResponseData); + } + + // 로그 + if (this.IsCommunicationLogOpen == true) + { + this.smartFileCommunicationLog.WriteString(string.Format("Receive COM4 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(readByte))); + this.smartFileCommunicationLog.WriteString(string.Format("Send COM4 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(responseData))); + } + } + catch + { + } + #endregion + } + else // Read Input Register(0x04) + { + if (this.SystemConfig2.ModbusRTUSelectFunction == (int)DataStore.ModbusFunction._04_ReadInputRegister) + { + #region Read Input Register + try + { + byte[] responseData; + byte errorCheck = this.Modbus.CheckRequestDataErrorRTU(readByte, ModbusFunctionCode.FunctionCode_04); + + if (errorCheck == 0x00) + responseData = this.Modbus.MakeRTU04ResponseData(this.Transfer_22_Modbus_Read_RTU(readByte), this.SystemConfig2.ModbusRTUSlaveIDCOM4); + else + responseData = this.Modbus.MakeRTU04ErrorResponseData(errorCheck, this.SystemConfig2.ModbusRTUSlaveIDCOM4); + + this.TransferSerialCOM4(responseData); + + // 로그 + if (this.IsCommunicationLogOpen == true) + { + this.smartFileCommunicationLog.WriteString(string.Format("Receive COM4 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(readByte))); + this.smartFileCommunicationLog.WriteString(string.Format("Send COM4 ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(responseData))); + } + } + catch + { + } + #endregion + } + } + #endregion + break; default: break; } } - // OPC 설정 시 사용 - private void smartModbusSlave1_OnReadHoldingRegisters(SmartModbusSlave.READHOLDINGREGISTERS datas) - { - byte[] madeDatas = new byte[TotalBytes]; - - // 수신 Slave Address 와 설정된 Slave Address가 같은 경우 - if (datas.RequestDatas.iSlave == this.smartModbusSlave1.SlaveAddress) - { - madeDatas = this.Transfer_22_Modbus(); - - datas.ResponDatas.chDatas = madeDatas; - datas.ResponDatas.iNumberOfByte = TotalBytes; - } - } - private void smartModbusSlave3_OnReadHoldingRegisters(SmartModbusSlave.READHOLDINGREGISTERS datas) - { - byte[] madeDatas = new byte[TotalBytes]; - - // 수신 Slave Address 와 설정된 Slave Address가 같은 경우 - if (datas.RequestDatas.iSlave == this.smartModbusSlave1.SlaveAddress) - { - madeDatas = this.Transfer_22_Modbus(); - - datas.ResponDatas.chDatas = madeDatas; - datas.ResponDatas.iNumberOfByte = TotalBytes; - } - } - private void smartModbusSlave4_OnReadHoldingRegisters(SmartModbusSlave.READHOLDINGREGISTERS datas) - { - byte[] madeDatas = new byte[TotalBytes]; - - // 수신 Slave Address 와 설정된 Slave Address가 같은 경우 - if (datas.RequestDatas.iSlave == this.smartModbusSlave1.SlaveAddress) - { - madeDatas = this.Transfer_22_Modbus(); - - datas.ResponDatas.chDatas = madeDatas; - datas.ResponDatas.iNumberOfByte = TotalBytes; - } - } - private void smartTCPMultiServer_OnReceiveHandler(SmartTCPMultiServer.CHandleClinet.READINFO datas) { int ret = 0; @@ -11263,34 +13074,147 @@ namespace ITC81DB_0H.Forms } #endregion break; - case 16: + case (int)DataStore.EthernetMode.f16_OPC: #region OPC if (this.smartTCPMultiServer.ClientInfoList != null) { - sendDatas[0] = readByte[0]; - sendDatas[1] = readByte[1]; - sendDatas[2] = 0x00; - sendDatas[3] = 0x00; + byte[] responseData; + byte errorCheck = this.Modbus.CheckRequestDataErrorTCP(readByte, ModbusFunctionCode.FunctionCode_04); - // Length(Unit ID~ 길이) - sendDatas[4] = 0x00; - sendDatas[5] = 0x33; - // Unit ID - sendDatas[6] = 0x01; - //Function code - sendDatas[7] = 0x03; - - // Byte Count(Data의 개수) - sendDatas[8] = 0x30; - - madeDatas = this.Transfer_22_Modbus(); - - for (int i = 0; i < TotalBytes; i++) - sendDatas[9 + i] = madeDatas[i]; + if (errorCheck == 0x00) + responseData = this.Modbus.MakeTCP04ResponseData(readByte, this.Transfer_22_Modbus_Read_TCP(readByte)); + else + responseData = this.Modbus.MakeTCP04ErrorResponseData(readByte, errorCheck); foreach (SmartTCPMultiServer.CLIENTSINFOS client in this.smartTCPMultiServer.ClientInfoList) { - this.smartTCPMultiServer.SendByteByClientID(client.strID, sendDatas); + this.smartTCPMultiServer.SendByteByClientID(client.strID, responseData); + } + } + #endregion + break; + case (int)DataStore.EthernetMode.f22_Modbus_TCP: + #region Modbus TCP + if (this.smartTCPMultiServer.ClientInfoList != null) + { + this.ChildFormMainDisplay.MainDisplayModbus.UpdateReceiveCount(); + + if (readByte[7] == 0x03) // Read Holding Register + { + #region Read Holding Register + try + { + byte[] responseData; + byte errorCheck = this.Modbus.CheckRequestDataErrorTCP(readByte, ModbusFunctionCode.FunctionCode_03); + + if (errorCheck == 0x00) + responseData = this.Modbus.MakeTCPResponseData(readByte, this.Transfer_22_Modbus_Read_TCP(readByte), ModbusFunctionCode.FunctionCode_03); + else + responseData = this.Modbus.MakeTCPErrorResponseData(readByte, errorCheck, ModbusFunctionCode.FunctionCode_03); + + foreach (SmartTCPMultiServer.CLIENTSINFOS client in this.smartTCPMultiServer.ClientInfoList) + { + this.smartTCPMultiServer.SendByteByClientID(client.strID, responseData); + } + + // 로그 + if (this.IsCommunicationLogOpen == true) + { + this.smartFileCommunicationLog.WriteString(string.Format("Receive TCP ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(readByte))); + this.smartFileCommunicationLog.WriteString(string.Format("Send TCP ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(responseData))); + } + } + catch + { + } + #endregion + } + else if (readByte[7] == 0x10) // Write Multiple Register + { + #region Write Multiple Register + try + { + byte[] errorResponseData = new byte[9]; + byte[] responseData = new byte[12]; + byte errorCheck = this.Modbus.CheckRequestDataErrorTCP(readByte, ModbusFunctionCode.FunctionCode_16); + + if (errorCheck == 0x00) + { + for (int i = 0; i < 12; i++) + responseData[i] = readByte[i]; + responseData[5] = 0x06; + + foreach (SmartTCPMultiServer.CLIENTSINFOS client in this.smartTCPMultiServer.ClientInfoList) + { + this.smartTCPMultiServer.SendByteByClientID(client.strID, responseData); + } + + this.ReceiveModbusTCPWriteManager(readByte); + } + else + { + for (int i = 0; i < 5; i++) + errorResponseData[i] = readByte[i]; + + // Length + errorResponseData[5] = 0x03; + // Unit ID + errorResponseData[6] = 0x01; + // Function Code + errorResponseData[7] = 0x90; + // Error Code + errorResponseData[8] = errorCheck; + + foreach (SmartTCPMultiServer.CLIENTSINFOS client in this.smartTCPMultiServer.ClientInfoList) + { + this.smartTCPMultiServer.SendByteByClientID(client.strID, responseData); + } + } + + // 로그 + if (this.IsCommunicationLogOpen == true) + { + this.smartFileCommunicationLog.WriteString(string.Format("Receive TCP ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(readByte))); + this.smartFileCommunicationLog.WriteString(string.Format("Send TCP ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(responseData))); + } + } + catch + { + } + #endregion + } + else // Read Input Register(0x04) + { + if (this.SystemConfig2.ModbusTCPSelectFunction == (int)DataStore.ModbusFunction._04_ReadInputRegister) + { + #region Read Input Register + try + { + byte[] responseData; + byte errorCheck = this.Modbus.CheckRequestDataErrorTCP(readByte, ModbusFunctionCode.FunctionCode_04); + + if (errorCheck == 0x00) + responseData = this.Modbus.MakeTCP04ResponseData(readByte, this.Transfer_22_Modbus_Read_TCP(readByte)); + else + responseData = this.Modbus.MakeTCP04ErrorResponseData(readByte, errorCheck); + + foreach (SmartTCPMultiServer.CLIENTSINFOS client in this.smartTCPMultiServer.ClientInfoList) + { + this.smartTCPMultiServer.SendByteByClientID(client.strID, responseData); + } + + // 로그 + if (this.IsCommunicationLogOpen == true) + { + this.smartFileCommunicationLog.WriteString(string.Format("Receive TCP ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(readByte))); + this.smartFileCommunicationLog.WriteString(string.Format("Send TCP ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, BitConverter.ToString(responseData))); + } + } + catch + { + } + #endregion + } } } #endregion @@ -11327,6 +13251,86 @@ namespace ITC81DB_0H.Forms this.CollectionBufferWeightData.Clear(); } } + private void timerEthernetPing_Tick(object sender, EventArgs e) + { + try + { + CIPSetting.PINGRESULTINFO pingResultInfo = new CIPSetting.PINGRESULTINFO(); + if (this.SystemConfig2.EthernetOperationMode == 1) // 중량선별기 : Server + { + try + { + //if (string.IsNullOrEmpty(this.smartTCPMultiServer.ClientInfoList[0].strIPAddress)) + //{ + // if (this.IsCommunicationLogOpen == true) + // { + // this.smartFileCommunicationLog.WriteString(string.Format("Connection ({0:yyyy-MM-dd HH:mm:ss}): null ", DateTime.Now)); + // this.smartFileCommunicationLog.WriteString(string.Format("ClientInfoList ({0:yyyy-MM-dd HH:mm:ss}): {1}_{2}", DateTime.Now, this.smartTCPMultiServer.ClientInfoList[0].strIPAddress)); + // } + + // return; + //} + + //if (this.IsCommunicationLogOpen == true) + // this.smartFileCommunicationLog.WriteString(string.Format("ClientInfoList ({0:yyyy-MM-dd HH:mm:ss}): {1}_{2}", DateTime.Now, this.smartTCPMultiServer.ClientInfoList[0].strIPAddress)); + bool bValue = this.smartConfigs.IPSettings.PingIP(this.smartTCPMultiServer.ClientInfoList[0].strIPAddress, ref pingResultInfo); + if (bValue == false) + { + this.ChildFormMainDisplay.UpdateEthernetStatusDisplay(false); + this.ChildFormMenu.CenterConfiEthernet.DelegateConnectedIPStatusOut("-"); + bool disconnect = this.smartTCPMultiServer.CloseClientIP(this.smartTCPMultiServer.ClientInfoList[0].strIPAddress); + + // 로그 + if (this.IsCommunicationLogOpen == true) + this.smartFileCommunicationLog.WriteString(string.Format("CloseClientIP ({0:yyyy-MM-dd HH:mm:ss}): {1}_{2}", DateTime.Now, disconnect.ToString())); + + this.EthernetServerStart(); + } + + // 로그 + if (this.IsCommunicationLogOpen == true) + this.smartFileCommunicationLog.WriteString(string.Format("Connection ({0:yyyy-MM-dd HH:mm:ss}): {1}", DateTime.Now, bValue.ToString())); + } + catch + { + this.ChildFormMainDisplay.UpdateEthernetStatusDisplay(false); + this.ChildFormMenu.CenterConfiEthernet.DelegateConnectedIPStatusOut("-"); + + // 로그 + if (this.IsCommunicationLogOpen == true) + this.smartFileCommunicationLog.WriteString(string.Format("Error ({0:yyyy-MM-dd HH:mm:ss}): Catch", DateTime.Now)); + } + } + else // 중량선별기 : Client + { + try + { + if (this.smartConfigs.IPSettings.PingIP(this.SystemConfig2.EthernetAddress, ref pingResultInfo) == false) + { + this.EthernetClientDisconnect(); + this.EthernetClientConnect(); + } + } + catch + { + this.DelegateUISeverStatus(false); + this.ChildFormMenu.CenterConfiEthernet.DelegateConnectedIPStatusOut("-"); + } + } + } + catch + { + if (this.SystemConfig2.EthernetOperationMode == 1) // 중량선별기 : Server + { + this.ChildFormMainDisplay.UpdateEthernetStatusDisplay(false); + } + else // 중량선별기 : Client + { + this.DelegateUISeverStatus(false); + this.EthernetClientDisconnect(); + } + } + } // 전송지연시간 관련 private void timerCOM1_Tick(object sender, EventArgs e) diff --git a/ITC81DB_0H/Forms/FormMain.resx b/ITC81DB_0H/Forms/FormMain.resx index a989c76..edce1dc 100644 --- a/ITC81DB_0H/Forms/FormMain.resx +++ b/ITC81DB_0H/Forms/FormMain.resx @@ -147,15 +147,6 @@ 235, 56 - - 403, 56 - - - 568, 56 - - - 733, 56 - 898, 56 @@ -165,6 +156,9 @@ 1054, 56 + + 399, 58 + WEBPAD diff --git a/ITC81DB_0H/Forms/FormMainDisplay.Designer.cs b/ITC81DB_0H/Forms/FormMainDisplay.Designer.cs index d1245b3..2192d65 100644 --- a/ITC81DB_0H/Forms/FormMainDisplay.Designer.cs +++ b/ITC81DB_0H/Forms/FormMainDisplay.Designer.cs @@ -63,6 +63,7 @@ this.timerServer = new System.Windows.Forms.Timer(); this.buttonConveyorUpDown = new SmartX.SmartButton(); this.buttonHiddenMenu = new SmartX.SmartButton(); + this.buttonModbus = new SmartX.SmartButton(); ((System.ComponentModel.ISupportInitialize)(this.smartForm1)).BeginInit(); this.panel1.SuspendLayout(); this.SuspendLayout(); @@ -620,6 +621,7 @@ // panel1 // this.panel1.BackColor = System.Drawing.Color.Black; + this.panel1.Controls.Add(this.buttonModbus); this.panel1.Controls.Add(this.buttonFeedback); this.panel1.Controls.Add(this.buttonBargraph); this.panel1.Controls.Add(this.buttonStartMenu); @@ -785,6 +787,38 @@ this.buttonHiddenMenu.UpImage = ((System.Drawing.Image)(resources.GetObject("buttonHiddenMenu.UpImage"))); this.buttonHiddenMenu.Click += new System.EventHandler(this.buttonHiddenMenu_Click); // + // buttonModbus + // + this.buttonModbus.BackPictureBox = null; + this.buttonModbus.BackPictureBox1 = null; + this.buttonModbus.BackPictureBox2 = null; + this.buttonModbus.ButtonColor = System.Drawing.Color.Gray; + this.buttonModbus.ButtonImageAutoSize = true; + this.buttonModbus.ColorKeySamplePosition = new System.Drawing.Point(0, 0); + this.buttonModbus.DisableImage = ((System.Drawing.Image)(resources.GetObject("buttonModbus.DisableImage"))); + this.buttonModbus.DownImage = ((System.Drawing.Image)(resources.GetObject("buttonModbus.DownImage"))); + this.buttonModbus.GroupID = 0; + this.buttonModbus.InitVisible = true; + this.buttonModbus.Location = new System.Drawing.Point(456, 0); + this.buttonModbus.Mode = SmartX.SmartButton.BUTTONMODE.RADIO; + this.buttonModbus.Name = "buttonModbus"; + this.buttonModbus.NestedClickEventPrevent = false; + this.buttonModbus.OutlinePixel = 1; + this.buttonModbus.RepeatInterval = 200; + this.buttonModbus.RepeatIntervalAccelerate = null; + this.buttonModbus.SafeInterval = 200; + this.buttonModbus.Size = new System.Drawing.Size(65, 65); + this.buttonModbus.SpecialFunction = SmartX.SmartButton.SPECIALFUNC.NONE; + this.buttonModbus.TabIndex = 553; + this.buttonModbus.TextColor = System.Drawing.Color.Black; + this.buttonModbus.TextDownColor = System.Drawing.Color.White; + this.buttonModbus.TextHAlign = SmartX.SmartButton.TextHorAlign.Middle; + this.buttonModbus.TextLocation = new System.Drawing.Point(0, 0); + this.buttonModbus.TextVAlign = SmartX.SmartButton.TextVerAlign.Middle; + this.buttonModbus.UpImage = ((System.Drawing.Image)(resources.GetObject("buttonModbus.UpImage"))); + this.buttonModbus.Visible = false; + this.buttonModbus.Click += new System.EventHandler(this.buttonModbus_Click); + // // FormMainDisplay // this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); @@ -858,5 +892,6 @@ private SmartX.SmartButton buttonFeedback; private SmartX.SmartButton buttonConveyorUpDown; private SmartX.SmartButton buttonHiddenMenu; + private SmartX.SmartButton buttonModbus; } } \ No newline at end of file diff --git a/ITC81DB_0H/Forms/FormMainDisplay.cs b/ITC81DB_0H/Forms/FormMainDisplay.cs index 9224667..97552c4 100644 --- a/ITC81DB_0H/Forms/FormMainDisplay.cs +++ b/ITC81DB_0H/Forms/FormMainDisplay.cs @@ -32,6 +32,7 @@ namespace ITC81DB_0H.Forms public ControlMainDisplayMenu MainDisplayMenu; public ControlMainDisplayAlarm MainDisplayAlarm; public ControlMainDisplayFeedback MainDisplayFeedback; + public ControlMainDisplayModbus MainDisplayModbus; #endregion #region Constructor @@ -164,6 +165,7 @@ namespace ITC81DB_0H.Forms this.MainDisplayMenu = new ControlMainDisplayMenu(this); this.MainDisplayAlarm = new ControlMainDisplayAlarm(); this.MainDisplayFeedback = new ControlMainDisplayFeedback(this); + this.MainDisplayModbus = new ControlMainDisplayModbus(this); this.MainDisplayWeightBigScreen.Location = new Point(0, 65); this.MainDisplayWeightSmall.Location = new Point(0, 65); @@ -174,6 +176,7 @@ namespace ITC81DB_0H.Forms this.MainDisplayMenu.Location = new Point(0, 213); this.MainDisplayAlarm.Location = new Point(390, 60); this.MainDisplayFeedback.Location = new Point(0, 313); + this.MainDisplayModbus.Location = new Point(0, 213); this.Controls.Add(this.MainDisplayWeightBigScreen); this.Controls.Add(this.MainDisplayWeightSmall); @@ -184,6 +187,7 @@ namespace ITC81DB_0H.Forms this.Controls.Add(this.MainDisplayMenu); this.Controls.Add(this.MainDisplayAlarm); this.Controls.Add(this.MainDisplayFeedback); + this.Controls.Add(this.MainDisplayModbus); if (this.ParentForm.SystemConfig1.IsLogin == true) { @@ -231,7 +235,7 @@ namespace ITC81DB_0H.Forms else this.ParentForm.CurrentSystemStatus.CurrentUser.Group = DataStore.UserGroup.Level4Developer; - this.CurrentDisplay = DataStore.MainDisplayStore.DisplayStartBarGraph; + this.CurrentDisplay = DataStore.MainDisplayStore.BarGraph; this.DisplayBottomMain(this.CurrentDisplay); } @@ -247,6 +251,23 @@ namespace ITC81DB_0H.Forms } } + public void BottomButtonLocation(int buttonNo, SmartX.SmartButton button) + { + switch (buttonNo) + { + case 1: + button.Location = new Point(385, 0); + break; + case 2: + button.Location = new Point(456, 0); + break; + case 3: + button.Location = new Point(527, 0); + break; + default: + break; + } + } public void UpdateDisplayAlarmView(WeightData data) { this.MainDisplayWeightBigScreen.UpdateDisplayAlarmView(this.ParentForm.CurrentWeightData); @@ -357,6 +378,13 @@ namespace ITC81DB_0H.Forms if (this.MainDisplayStopDataStatistics != null) this.MainDisplayStopDataStatistics.Clear(); } + public void Clear() + { + this.ParentForm.ClearQueue(); + + this.ClearCurrentData(); + this.ParentForm.TransferData(CommunicationCommand.Clear, CommunicationID.SubBoard1); + } private void UpdateDisplayUser(SystemStatus status) { @@ -527,8 +555,6 @@ namespace ITC81DB_0H.Forms //this.CurrentDisplay = DataStore.MainDisplayStore.DisplayStartBarGraph; //this.DisplayBottomMain(this.CurrentDisplay); - - this.CurrentBottomMenuControlEnable(status); } else { @@ -557,8 +583,6 @@ namespace ITC81DB_0H.Forms //this.CurrentDisplay = DataStore.MainDisplayStore.DisplayStartBarGraph; //this.DisplayBottomMain(this.CurrentDisplay); - - this.CurrentBottomMenuControlEnable(status); } } public void UpdateCurrentProductDisplay(DataStore.EquipmentStatus status, ProductItem pItem, WeightData wData) @@ -589,7 +613,7 @@ namespace ITC81DB_0H.Forms this.MainDisplayStartList.UpdateCurrentProductDisplay(status, pItem, wData); if (this.MainDisplayStopDataStatistics != null) this.MainDisplayStopDataStatistics.UpdateCurrentProductDisplay(status, pItem, wData); - if(this.MainDisplayMenu != null && this.CurrentDisplay == DataStore.MainDisplayStore.DisplayStartMenu) + if(this.MainDisplayMenu != null && this.CurrentDisplay == DataStore.MainDisplayStore.SubMenu) this.MainDisplayMenu.UpdateControl(this.ParentForm.CurrentJudgmentSetItem, this.ParentForm.CurrentSystemParameter4); } public void UpdateStopWeightDisplay(DataStore.EquipmentStatus status, WeightData data) @@ -627,6 +651,16 @@ namespace ITC81DB_0H.Forms if (this.MainDisplayStopDataStatistics != null) this.MainDisplayStopDataStatistics.UpdateStartWeightDisplay(status, wData); } + public void ChangeProductNumber(int productNumber) + { + this.ParentForm.ClearAlarm(0); + this.SendCommProductChange(productNumber); + } + public void SendCommProductChange(int productNumber) + { + this.buttonProductNo.Text = "**"; + this.ParentForm.TransferProductParameter(productNumber); + } public void UpdateBarcodeDisplay(Barcode barcode) { if (this.MainDisplayWeightBigScreen != null) @@ -642,11 +676,38 @@ namespace ITC81DB_0H.Forms this.MainDisplayWeightSmall.UpdateEthernetStatusDisplay(status); } - public void CurrentBottomMenuControlEnable(DataStore.EquipmentStatus status) + public void UpdateModbusScreen() { - if (this.MainDisplayFeedback.IsUsingFeedback() == true) + if (this.CurrentDisplay == DataStore.MainDisplayStore.Modbus) { - this.buttonFeedback.Visible = true; + this.ParentForm.Update30000ModbusItem(); + this.MainDisplayModbus.DisplayRefresh(this.ParentForm.CurrentSystemStatus); + } + } + public void MainBottomModbusIconAdd(bool bValue) + { + this.ParentForm.IsOPCModbusUsing = bValue; + this.CurrentBottomMenuControlEnable(); + } + + public void CurrentBottomMenuControlEnable() + { + Collection buttons = new Collection(); + bool feedback = this.MainDisplayFeedback.IsUsingFeedback(); + int sampleCount = int.Parse(this.ParentForm.CurrentSystemParameter2.OPT1SamplingCount); + bool modbus = this.ParentForm.IsOPCModbusUsing; + + buttons.Clear(); + buttons.Add(this.buttonFeedback); + buttons.Add(this.buttonModbus); + for (int i = 0; i < buttons.Count; i++) + buttons[i].Visible = false; + + buttons.Clear(); + if (feedback == true && sampleCount != 0) + { + buttons.Add(this.buttonFeedback); + if (this.ParentForm.CurrentSystemParameter2.OPT1OverRangeInt <= 0 && this.ParentForm.CurrentSystemParameter2.OPT1UnderRangeInt <= 0) { this.ParentForm.UpdateFeedbackData(this.ParentForm.CurrentProductItem, this.ParentForm.CurrentSystemParameter2); @@ -655,109 +716,62 @@ namespace ITC81DB_0H.Forms else this.ParentForm.UpdateFeedbackDeviation(this.ParentForm.CurrentProductItem, this.ParentForm.CurrentSystemParameter2); } - else - this.buttonFeedback.Visible = false; + if (modbus == true) + buttons.Add(this.buttonModbus); - //if (status == DataStore.EquipmentStatus.Start) - //{ - // this.buttonMenu.Enabled = false; - //} - //else - //{ - // if (this.ParentForm.CurrentSystemStatus.CurrentUser.Group == DataStore.UserGroup.LogOff) - // this.buttonMenu.Enabled = false; - // else - // this.buttonMenu.Enabled = true; - //} + for (int i = 0; i < buttons.Count; i++) + { + this.BottomButtonLocation(i + 1, buttons[i]); + buttons[i].Visible = true; + } } public void UpdateDisplayMenuButton(DataStore.MainDisplayStore main) { + if (this.buttonStartMenu.ButtonStatus != SmartButton.BUTSTATUS.UP) + this.buttonStartMenu.ButtonUp(); + if (this.buttonBargraph.ButtonStatus != SmartButton.BUTSTATUS.UP) + this.buttonBargraph.ButtonUp(); + if (this.buttonLinegraph.ButtonStatus != SmartButton.BUTSTATUS.UP) + this.buttonLinegraph.ButtonUp(); + if (this.buttonList.ButtonStatus != SmartButton.BUTSTATUS.UP) + this.buttonList.ButtonUp(); + if (this.buttonDataStat.ButtonStatus != SmartButton.BUTSTATUS.UP) + this.buttonDataStat.ButtonUp(); + if (this.buttonFeedback.ButtonStatus != SmartButton.BUTSTATUS.UP) + this.buttonFeedback.ButtonUp(); + if (this.buttonModbus.ButtonStatus != SmartButton.BUTSTATUS.UP) + this.buttonModbus.ButtonUp(); + switch (main) { - case DataStore.MainDisplayStore.DisplayStartMenu: + case DataStore.MainDisplayStore.SubMenu: if (this.buttonStartMenu.ButtonStatus != SmartButton.BUTSTATUS.DOWN) this.buttonStartMenu.ButtonDown(); - if (this.buttonBargraph.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonBargraph.ButtonUp(); - if (this.buttonLinegraph.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonLinegraph.ButtonUp(); - if (this.buttonList.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonList.ButtonUp(); - if (this.buttonDataStat.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonDataStat.ButtonUp(); - if (this.buttonFeedback.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonFeedback.ButtonUp(); break; - case DataStore.MainDisplayStore.DisplayStartBarGraph: - if (this.buttonStartMenu.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonStartMenu.ButtonUp(); + case DataStore.MainDisplayStore.BarGraph: if (this.buttonBargraph.ButtonStatus != SmartButton.BUTSTATUS.DOWN) this.buttonBargraph.ButtonDown(); - if (this.buttonLinegraph.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonLinegraph.ButtonUp(); - if (this.buttonList.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonList.ButtonUp(); - if (this.buttonDataStat.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonDataStat.ButtonUp(); - if (this.buttonFeedback.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonFeedback.ButtonUp(); break; - case DataStore.MainDisplayStore.DisplayStartLineGraph: - if (this.buttonStartMenu.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonStartMenu.ButtonUp(); - if (this.buttonBargraph.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonBargraph.ButtonUp(); + case DataStore.MainDisplayStore.LineGraph: if (this.buttonLinegraph.ButtonStatus != SmartButton.BUTSTATUS.DOWN) this.buttonLinegraph.ButtonDown(); - if (this.buttonList.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonList.ButtonUp(); - if (this.buttonDataStat.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonDataStat.ButtonUp(); - if (this.buttonFeedback.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonFeedback.ButtonUp(); break; - case DataStore.MainDisplayStore.DisplayStartList: - if (this.buttonStartMenu.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonStartMenu.ButtonUp(); - if (this.buttonBargraph.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonBargraph.ButtonUp(); - if (this.buttonLinegraph.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonLinegraph.ButtonUp(); + case DataStore.MainDisplayStore.List: if (this.buttonList.ButtonStatus != SmartButton.BUTSTATUS.DOWN) this.buttonList.ButtonDown(); - if (this.buttonDataStat.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonDataStat.ButtonUp(); - if (this.buttonFeedback.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonFeedback.ButtonUp(); break; - case DataStore.MainDisplayStore.DisplayStopDataStat: - if (this.buttonStartMenu.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonStartMenu.ButtonUp(); - if (this.buttonBargraph.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonBargraph.ButtonUp(); - if (this.buttonLinegraph.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonLinegraph.ButtonUp(); - if (this.buttonList.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonList.ButtonUp(); + case DataStore.MainDisplayStore.DataStat: if (this.buttonDataStat.ButtonStatus != SmartButton.BUTSTATUS.DOWN) this.buttonDataStat.ButtonDown(); - if (this.buttonFeedback.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonFeedback.ButtonUp(); break; - case DataStore.MainDisplayStore.DisplayFeedback: - if (this.buttonStartMenu.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonStartMenu.ButtonUp(); - if (this.buttonBargraph.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonBargraph.ButtonUp(); - if (this.buttonLinegraph.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonLinegraph.ButtonUp(); - if (this.buttonList.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonList.ButtonUp(); - if (this.buttonDataStat.ButtonStatus != SmartButton.BUTSTATUS.UP) - this.buttonDataStat.ButtonUp(); + case DataStore.MainDisplayStore.Feedback: if (this.buttonFeedback.ButtonStatus != SmartButton.BUTSTATUS.DOWN) this.buttonFeedback.ButtonDown(); break; + case DataStore.MainDisplayStore.Modbus: + if (this.buttonModbus.ButtonStatus != SmartButton.BUTSTATUS.DOWN) + this.buttonModbus.ButtonDown(); + break; default: break; } @@ -766,8 +780,8 @@ namespace ITC81DB_0H.Forms { switch (main) { - case DataStore.MainDisplayStore.DisplayStartMenu: - this.UpdateDisplayMenuButton(DataStore.MainDisplayStore.DisplayStartMenu); + case DataStore.MainDisplayStore.SubMenu: + this.UpdateDisplayMenuButton(DataStore.MainDisplayStore.SubMenu); this.MainDisplayMenu.DisplayRefresh(this.ParentForm.CurrentSystemStatus); this.MainDisplayWeightSmall.DisplayRefresh(this.ParentForm.CurrentSystemStatus); //this.MainDisplayWeightBigScreen.DisplayRefresh(this.ParentForm.CurrentSystemStatus); @@ -775,41 +789,48 @@ namespace ITC81DB_0H.Forms //this.MainDisplayWeightBigScreen.BringToFront(); this.MainDisplayWeightSmall.BringToFront(); break; - case DataStore.MainDisplayStore.DisplayStartBarGraph: - this.UpdateDisplayMenuButton(DataStore.MainDisplayStore.DisplayStartBarGraph); + case DataStore.MainDisplayStore.BarGraph: + this.UpdateDisplayMenuButton(DataStore.MainDisplayStore.BarGraph); this.MainDisplayStart.DisplayRefresh(this.ParentForm.CurrentSystemStatus); this.MainDisplayWeightBigScreen.DisplayRefresh(this.ParentForm.CurrentSystemStatus); this.MainDisplayStart.BringToFront(); this.MainDisplayWeightBigScreen.BringToFront(); break; - case DataStore.MainDisplayStore.DisplayStartLineGraph: - this.UpdateDisplayMenuButton(DataStore.MainDisplayStore.DisplayStartLineGraph); + case DataStore.MainDisplayStore.LineGraph: + this.UpdateDisplayMenuButton(DataStore.MainDisplayStore.LineGraph); this.MainDisplayStartGraph.DisplayRefresh(this.ParentForm.CurrentSystemStatus); this.MainDisplayWeightBigScreen.DisplayRefresh(this.ParentForm.CurrentSystemStatus); this.MainDisplayStartGraph.BringToFront(); this.MainDisplayWeightBigScreen.BringToFront(); break; - case DataStore.MainDisplayStore.DisplayStartList: - this.UpdateDisplayMenuButton(DataStore.MainDisplayStore.DisplayStartList); + case DataStore.MainDisplayStore.List: + this.UpdateDisplayMenuButton(DataStore.MainDisplayStore.List); this.MainDisplayStartList.DisplayRefresh(this.ParentForm.CurrentSystemStatus); this.MainDisplayWeightSmall.DisplayRefresh(this.ParentForm.CurrentSystemStatus); this.MainDisplayStartList.BringToFront(); this.MainDisplayWeightSmall.BringToFront(); break; - case DataStore.MainDisplayStore.DisplayStopDataStat: - this.UpdateDisplayMenuButton(DataStore.MainDisplayStore.DisplayStopDataStat); + case DataStore.MainDisplayStore.DataStat: + this.UpdateDisplayMenuButton(DataStore.MainDisplayStore.DataStat); this.MainDisplayStopDataStatistics.DisplayRefresh(this.ParentForm.CurrentSystemStatus); this.MainDisplayWeightBigScreen.DisplayRefresh(this.ParentForm.CurrentSystemStatus); this.MainDisplayStopDataStatistics.BringToFront(); this.MainDisplayWeightBigScreen.BringToFront(); break; - case DataStore.MainDisplayStore.DisplayFeedback: - this.UpdateDisplayMenuButton(DataStore.MainDisplayStore.DisplayFeedback); + case DataStore.MainDisplayStore.Feedback: + this.UpdateDisplayMenuButton(DataStore.MainDisplayStore.Feedback); this.MainDisplayFeedback.DisplayRefresh(this.ParentForm.CurrentSystemStatus); this.MainDisplayWeightBigScreen.DisplayRefresh(this.ParentForm.CurrentSystemStatus); this.MainDisplayFeedback.BringToFront(); this.MainDisplayWeightBigScreen.BringToFront(); break; + case DataStore.MainDisplayStore.Modbus: + this.ParentForm.Update30000ModbusItem(); + this.UpdateDisplayMenuButton(DataStore.MainDisplayStore.Modbus); + this.MainDisplayModbus.DisplayRefresh(this.ParentForm.CurrentSystemStatus); + this.MainDisplayModbus.BringToFront(); + this.MainDisplayWeightSmall.BringToFront(); + break; default: break; } @@ -861,8 +882,16 @@ namespace ITC81DB_0H.Forms this.UpdateDisplayUser(status); - if (this.CurrentDisplay == DataStore.MainDisplayStore.DisplayFeedback) - this.CurrentDisplay = DataStore.MainDisplayStore.DisplayStartBarGraph; + if (this.CurrentDisplay == DataStore.MainDisplayStore.Feedback) + { + if (this.buttonFeedback.Visible == false) + this.CurrentDisplay = DataStore.MainDisplayStore.BarGraph; + } + if (this.CurrentDisplay == DataStore.MainDisplayStore.Modbus) + { + if (this.buttonModbus.Visible == false) + this.CurrentDisplay = DataStore.MainDisplayStore.BarGraph; + } this.DisplayBottomMain(this.CurrentDisplay); @@ -1078,19 +1107,19 @@ namespace ITC81DB_0H.Forms switch (this.CurrentDisplay) { - case DataStore.MainDisplayStore.DisplayStartMenu: + case DataStore.MainDisplayStore.SubMenu: this.MainDisplayMenu.DisplayRefresh(this.ParentForm.CurrentSystemStatus); break; - case DataStore.MainDisplayStore.DisplayStartBarGraph: + case DataStore.MainDisplayStore.BarGraph: this.MainDisplayStart.DisplayRefresh(this.ParentForm.CurrentSystemStatus); break; - case DataStore.MainDisplayStore.DisplayStartLineGraph: + case DataStore.MainDisplayStore.LineGraph: this.MainDisplayStartGraph.DisplayRefresh(this.ParentForm.CurrentSystemStatus); break; - case DataStore.MainDisplayStore.DisplayStartList: + case DataStore.MainDisplayStore.List: this.MainDisplayStartList.DisplayRefresh(this.ParentForm.CurrentSystemStatus); break; - case DataStore.MainDisplayStore.DisplayStopDataStat: + case DataStore.MainDisplayStore.DataStat: this.MainDisplayStopDataStatistics.DisplayRefresh(this.ParentForm.CurrentSystemStatus); break; default: @@ -1114,19 +1143,19 @@ namespace ITC81DB_0H.Forms switch (this.CurrentDisplay) { - case DataStore.MainDisplayStore.DisplayStartMenu: + case DataStore.MainDisplayStore.SubMenu: this.MainDisplayMenu.DisplayRefresh(this.ParentForm.CurrentSystemStatus); break; - case DataStore.MainDisplayStore.DisplayStartBarGraph: + case DataStore.MainDisplayStore.BarGraph: this.MainDisplayStart.DisplayRefresh(this.ParentForm.CurrentSystemStatus); break; - case DataStore.MainDisplayStore.DisplayStartLineGraph: + case DataStore.MainDisplayStore.LineGraph: this.MainDisplayStartGraph.DisplayRefresh(this.ParentForm.CurrentSystemStatus); break; - case DataStore.MainDisplayStore.DisplayStartList: + case DataStore.MainDisplayStore.List: this.MainDisplayStartList.DisplayRefresh(this.ParentForm.CurrentSystemStatus); break; - case DataStore.MainDisplayStore.DisplayStopDataStat: + case DataStore.MainDisplayStore.DataStat: this.MainDisplayStopDataStatistics.DisplayRefresh(this.ParentForm.CurrentSystemStatus); break; default: @@ -1169,46 +1198,52 @@ namespace ITC81DB_0H.Forms private void buttonStop_Click(object sender, EventArgs e) { - this.CurrentDisplay = DataStore.MainDisplayStore.DisplayStartBarGraph; + this.CurrentDisplay = DataStore.MainDisplayStore.BarGraph; this.DisplayBottomMain(this.CurrentDisplay); } private void buttonBargraph_Click(object sender, EventArgs e) { - this.CurrentDisplay = DataStore.MainDisplayStore.DisplayStartBarGraph; + this.CurrentDisplay = DataStore.MainDisplayStore.BarGraph; this.DisplayBottomMain(this.CurrentDisplay); } private void buttonLinegraph_Click(object sender, EventArgs e) { - this.CurrentDisplay = DataStore.MainDisplayStore.DisplayStartLineGraph; + this.CurrentDisplay = DataStore.MainDisplayStore.LineGraph; this.DisplayBottomMain(this.CurrentDisplay); } private void buttonList_Click(object sender, EventArgs e) { - this.CurrentDisplay = DataStore.MainDisplayStore.DisplayStartList; + this.CurrentDisplay = DataStore.MainDisplayStore.List; this.DisplayBottomMain(this.CurrentDisplay); } private void buttonDataStat_Click(object sender, EventArgs e) { - this.CurrentDisplay = DataStore.MainDisplayStore.DisplayStopDataStat; + this.CurrentDisplay = DataStore.MainDisplayStore.DataStat; this.DisplayBottomMain(this.CurrentDisplay); } private void buttonStartMenu_Click(object sender, EventArgs e) { - this.CurrentDisplay = DataStore.MainDisplayStore.DisplayStartMenu; + this.CurrentDisplay = DataStore.MainDisplayStore.SubMenu; this.DisplayBottomMain(this.CurrentDisplay); } private void buttonFeedback_Click(object sender, EventArgs e) { - this.CurrentDisplay = DataStore.MainDisplayStore.DisplayFeedback; + this.CurrentDisplay = DataStore.MainDisplayStore.Feedback; this.DisplayBottomMain(this.CurrentDisplay); - } + } + private void buttonModbus_Click(object sender, EventArgs e) + { + this.CurrentDisplay = DataStore.MainDisplayStore.Modbus; + + this.DisplayBottomMain(this.CurrentDisplay); + } #endregion private void buttonExit_Click(object sender, EventArgs e) diff --git a/ITC81DB_0H/Forms/FormMainDisplay.resx b/ITC81DB_0H/Forms/FormMainDisplay.resx index 4521967..7cb783f 100644 --- a/ITC81DB_0H/Forms/FormMainDisplay.resx +++ b/ITC81DB_0H/Forms/FormMainDisplay.resx @@ -1243,6 +1243,297 @@ MRwOXS4XrjYDr9c7GAxQgM/W63U8Hsd1JkFbJhaLKYqCGnyg33umaBlqtGUoc5Th3el0qtVqOG1CkiS1 Wq1rLahl9Pt9If/XeSJqIpPJhMohyzJtH3xqZqFQaLlc5nI5HJsctdVwOIwDxhhjjDHGGGPsJhbLG7hZ LovvQ3RGAAAAAElFTkSuQmCC + + + + + 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 + AAAAAElFTkSuQmCC diff --git a/ITC81DB_0H/Forms/FormMenu.cs b/ITC81DB_0H/Forms/FormMenu.cs index 3744ec9..5b32c69 100644 --- a/ITC81DB_0H/Forms/FormMenu.cs +++ b/ITC81DB_0H/Forms/FormMenu.cs @@ -601,6 +601,9 @@ namespace ITC81DB_0H.Forms case DataStore.DisplayStore.MainDisplay: this.ParentForm.ChildFormMainDisplay.DisplayHiddenMenu(true); break; + case DataStore.DisplayStore.ConfiEthernet: + this.CenterConfiEthernet.DisplayHiddenMenu(true); + break; case DataStore.DisplayStore.EquipInitialize: this.CenterEquipInitialize.DisplayHiddenMenu(true); break; @@ -678,6 +681,7 @@ namespace ITC81DB_0H.Forms this.CenterConfiSerial.BringToFront(); break; case DataStore.MenuBottomConfiguration.Ethernet: + this.bottomConfiguration.CurrentMenu = DataStore.MenuBottomConfiguration.Ethernet; this.CenterConfiEthernet.DisplayRefresh(this.ParentForm.CurrentSystemStatus); this.CenterConfiEthernet.BringToFront(); break; diff --git a/ITC81DB_0H/Helper.cs b/ITC81DB_0H/Helper.cs index 455688b..5b67f58 100644 --- a/ITC81DB_0H/Helper.cs +++ b/ITC81DB_0H/Helper.cs @@ -52,6 +52,26 @@ namespace ITC81DB_0H return ret; } + /// + /// 소수점 없는 String 값의 끝에 "0" 추가 + 소수점 추가 후 String 값으로 리턴 + /// + /// 소수점이 없는 값 + /// 소수점 자릿수 + /// 소수점 자리 추가 데이터 + public static string StringToDecimalPlacesPlusZero(string value, int decimalPlaces) + { + string ret = ""; + double dValue = 0.0; + + if (value == "0") + dValue = StringToWeight(value, decimalPlaces); + else + dValue = StringToWeight(value + "0", decimalPlaces); + ret = DoubleToString(dValue, decimalPlaces); + + return ret; + } + /// /// 소수점 없는 String형 값을 소수점 추가후 Double형으로 리턴(부호가 포함된 String형값) /// diff --git a/ITC81DB_0H/ITC81DB_2H.csproj b/ITC81DB_0H/ITC81DB_2H.csproj index 2df2303..decf669 100644 --- a/ITC81DB_0H/ITC81DB_2H.csproj +++ b/ITC81DB_0H/ITC81DB_2H.csproj @@ -47,6 +47,10 @@ Off + + False + C:\Program Files (x86)\Intech\InModbus.dll + @@ -98,6 +102,12 @@ ControlCenterSystemBLDCMotorSetting.cs + + UserControl + + + ControlConfiModbus.cs + UserControl @@ -164,6 +174,12 @@ ControlConfiOptionBoard2.cs + + UserControl + + + ControlMainDisplayModbus.cs + UserControl @@ -610,6 +626,10 @@ ControlConfiEthernetLocalIP.cs Designer + + ControlConfiModbus.cs + Designer + ControlConfiSerialBarcode.cs Designer @@ -646,6 +666,10 @@ ControlMainDisplayFeedback.cs Designer + + ControlMainDisplayModbus.cs + Designer + ControlMainDisplayStopDataStatistics.cs Designer diff --git a/ITC81DB_0H/Version.txt b/ITC81DB_0H/Version.txt index 0c99c10..c5399c1 100644 --- a/ITC81DB_0H/Version.txt +++ b/ITC81DB_0H/Version.txt @@ -12,6 +12,11 @@ ⺻ м 跮 */ +@ Ver 2.1.0 by CJY + - 2023.02.21 + - Ver 2.0.0 Modify + - ̴ ߰ + @ Ver 2.0.0 by CJY - 2023.02.06 - Ver 1.4.0 Modify diff --git a/ITC81DB_0H/bin/Release/ITC81DB_2H.exe b/ITC81DB_0H/bin/Release/ITC81DB_2H.exe index 642a958..880ff91 100644 Binary files a/ITC81DB_0H/bin/Release/ITC81DB_2H.exe and b/ITC81DB_0H/bin/Release/ITC81DB_2H.exe differ diff --git a/ITC81DB_0H/bin/Release/ITC81DB_2H_ImageDll.dll b/ITC81DB_0H/bin/Release/ITC81DB_2H_ImageDll.dll index d8a2501..ea666fa 100644 Binary files a/ITC81DB_0H/bin/Release/ITC81DB_2H_ImageDll.dll and b/ITC81DB_0H/bin/Release/ITC81DB_2H_ImageDll.dll differ diff --git a/ITC81DB_0H/bin/Release/InModbus.dll b/ITC81DB_0H/bin/Release/InModbus.dll new file mode 100644 index 0000000..c6b4610 Binary files /dev/null and b/ITC81DB_0H/bin/Release/InModbus.dll differ diff --git a/ITC81DB_0H/obj/Release/ITC81DB_2H.csproj.FileListAbsolute.txt b/ITC81DB_0H/obj/Release/ITC81DB_2H.csproj.FileListAbsolute.txt index f65e556..6c132e4 100644 --- a/ITC81DB_0H/obj/Release/ITC81DB_2H.csproj.FileListAbsolute.txt +++ b/ITC81DB_0H/obj/Release/ITC81DB_2H.csproj.FileListAbsolute.txt @@ -73,3 +73,6 @@ D:\Laboratory\ITC81DB_2H\ITC81DB_0H\bin\Release\ITC81DB_2H_ImageDll.pdb D:\Laboratory\ITC81DB_2H\ITC81DB_0H\obj\Release\ITC81DB_2H.exe D:\Laboratory\ITC81DB_2H\ITC81DB_0H\obj\Release\ITC81DB_2H.pdb D:\Laboratory\ITC81DB_2H\ITC81DB_0H\obj\Release\ITC81DB_0H.Controls.ControlCenterSystemAutoZero.resources +D:\Laboratory\ITC81DB_2H\ITC81DB_0H\obj\Release\ITC81DB_0H.Controls.ControlMainDisplayModbus.resources +D:\Laboratory\ITC81DB_2H\ITC81DB_0H\bin\Release\InModbus.dll +D:\Laboratory\ITC81DB_2H\ITC81DB_0H\obj\Release\ITC81DB_0H.Controls.ControlConfiModbus.resources diff --git a/ITC81DB_0H/obj/Release/ITC81DB_2H.exe b/ITC81DB_0H/obj/Release/ITC81DB_2H.exe index 642a958..880ff91 100644 Binary files a/ITC81DB_0H/obj/Release/ITC81DB_2H.exe and b/ITC81DB_0H/obj/Release/ITC81DB_2H.exe differ diff --git a/ITC81DB_ImageDll/ITC81DB_ImageDll/Class1.cs b/ITC81DB_ImageDll/ITC81DB_ImageDll/Class1.cs index fee6b36..5a0a579 100644 --- a/ITC81DB_ImageDll/ITC81DB_ImageDll/Class1.cs +++ b/ITC81DB_ImageDll/ITC81DB_ImageDll/Class1.cs @@ -169,6 +169,7 @@ namespace ITC81DB_2H_ImageDll chnMainLoginDisable, chnMainLoginUp, chnMainLogOutDown, + chnMainModbusScreen, chnMainPrintDisable, chnMainPrintDown, chnMainPrintUp, @@ -382,6 +383,7 @@ namespace ITC81DB_2H_ImageDll engJudgmentStandardUp, engMainFeedbackScreen, engMainLineScreen, + engMainModbusScreen, engMainRunLineOverDisable, engMainRunLineOverDown, engMainRunLineOverUp, @@ -615,6 +617,7 @@ namespace ITC81DB_2H_ImageDll gerMainCancelUp, gerMainFeedbackScreen, gerMainLineScreen, + gerMainModbusScreen, gerMainRunLineOverDisable, gerMainRunLineOverDown, gerMainRunLineOverUp, @@ -827,6 +830,7 @@ namespace ITC81DB_2H_ImageDll korJudgmentStandardUp, korMainFeedbackScreen, korMainLineScreen, + korMainModbusScreen, korMainRunLineOverDisable, korMainRunLineOverDown, korMainRunLineOverUp, @@ -1043,6 +1047,7 @@ namespace ITC81DB_2H_ImageDll rusMainLoginLoginDisable, rusMainLoginLoginDown, rusMainLoginLoginUp, + rusMainModbusScreen, rusMainRunLineOverDisable, rusMainRunLineOverDown, rusMainRunLineOverUp, @@ -2197,6 +2202,9 @@ namespace ITC81DB_2H_ImageDll case ButtonImages.engMainLineScreen: bt = new Bitmap(Resource1.engMainLineScreen); break; + case ButtonImages.engMainModbusScreen: + bt = new Bitmap(Resource1.engMainModbusScreen); + break; case ButtonImages.engMainRunLineOverDisable: bt = new Bitmap(Resource1.engMainRunLineOverDisable); break; @@ -2839,6 +2847,9 @@ namespace ITC81DB_2H_ImageDll case ButtonImages.gerMainLineScreen: bt = new Bitmap(Resource1.gerMainLineScreen); break; + case ButtonImages.gerMainModbusScreen: + bt = new Bitmap(Resource1.gerMainModbusScreen); + break; case ButtonImages.gerMainRunLineOverDisable: bt = new Bitmap(Resource1.gerMainRunLineOverDisable); break; @@ -3460,6 +3471,9 @@ namespace ITC81DB_2H_ImageDll case ButtonImages.korMainLineScreen: bt = new Bitmap(Resource1.korMainLineScreen); break; + case ButtonImages.korMainModbusScreen: + bt = new Bitmap(Resource1.korMainModbusScreen); + break; case ButtonImages.korMainRunLineOverDisable: bt = new Bitmap(Resource1.korMainRunLineOverDisable); break; @@ -4042,6 +4056,9 @@ namespace ITC81DB_2H_ImageDll case ButtonImages.rusMainLoginLoginUp: bt = new Bitmap(Resource1.rusMainLoginLoginUp); break; + case ButtonImages.rusMainModbusScreen: + bt = new Bitmap(Resource1.rusMainModbusScreen); + break; case ButtonImages.rusMainRunLineOverDisable: bt = new Bitmap(Resource1.rusMainRunLineOverDisable); break; diff --git a/ITC81DB_ImageDll/ITC81DB_ImageDll/ITC81DB_2H_ImageDll.csproj b/ITC81DB_ImageDll/ITC81DB_ImageDll/ITC81DB_2H_ImageDll.csproj index a84d048..850597e 100644 --- a/ITC81DB_ImageDll/ITC81DB_ImageDll/ITC81DB_2H_ImageDll.csproj +++ b/ITC81DB_ImageDll/ITC81DB_ImageDll/ITC81DB_2H_ImageDll.csproj @@ -3262,6 +3262,21 @@ + + + + + + + + + + + + + + + diff --git a/ITC81DB_ImageDll/ITC81DB_ImageDll/Resource1.Designer.cs b/ITC81DB_ImageDll/ITC81DB_ImageDll/Resource1.Designer.cs index f7d3b0e..4fafa5f 100644 --- a/ITC81DB_ImageDll/ITC81DB_ImageDll/Resource1.Designer.cs +++ b/ITC81DB_ImageDll/ITC81DB_ImageDll/Resource1.Designer.cs @@ -1184,6 +1184,13 @@ namespace ITC81DB_2H_ImageDll { } } + internal static System.Drawing.Bitmap chnMainModbusScreen { + get { + object obj = ResourceManager.GetObject("chnMainModbusScreen", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap chnMainPrintDisable { get { object obj = ResourceManager.GetObject("chnMainPrintDisable", resourceCulture); @@ -2675,6 +2682,13 @@ namespace ITC81DB_2H_ImageDll { } } + internal static System.Drawing.Bitmap engMainModbusScreen { + get { + object obj = ResourceManager.GetObject("engMainModbusScreen", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap engMainRunLineOverDisable { get { object obj = ResourceManager.GetObject("engMainRunLineOverDisable", resourceCulture); @@ -4201,6 +4215,13 @@ namespace ITC81DB_2H_ImageDll { } } + internal static System.Drawing.Bitmap gerMainModbusScreen { + get { + object obj = ResourceManager.GetObject("gerMainModbusScreen", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap gerMainRunLineOverDisable { get { object obj = ResourceManager.GetObject("gerMainRunLineOverDisable", resourceCulture); @@ -5664,6 +5685,13 @@ namespace ITC81DB_2H_ImageDll { } } + internal static System.Drawing.Bitmap korMainModbusScreen { + get { + object obj = ResourceManager.GetObject("korMainModbusScreen", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap korMainRunLineOverDisable { get { object obj = ResourceManager.GetObject("korMainRunLineOverDisable", resourceCulture); @@ -7050,6 +7078,13 @@ namespace ITC81DB_2H_ImageDll { } } + internal static System.Drawing.Bitmap rusMainModbusScreen { + get { + object obj = ResourceManager.GetObject("rusMainModbusScreen", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap rusMainRunLineOverDisable { get { object obj = ResourceManager.GetObject("rusMainRunLineOverDisable", resourceCulture); diff --git a/ITC81DB_ImageDll/ITC81DB_ImageDll/Resource1.resx b/ITC81DB_ImageDll/ITC81DB_ImageDll/Resource1.resx index e4d99e9..fa5512e 100644 --- a/ITC81DB_ImageDll/ITC81DB_ImageDll/Resource1.resx +++ b/ITC81DB_ImageDll/ITC81DB_ImageDll/Resource1.resx @@ -3196,4 +3196,19 @@ Resources\engHelpBLDCUp.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + Resources\chnMainModbusScreen.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\engMainModbusScreen.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\gerMainModbusScreen.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\korMainModbusScreen.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\rusMainModbusScreen.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/ITC81DB_ImageDll/ITC81DB_ImageDll/Resources/chnMainModbusScreen.png b/ITC81DB_ImageDll/ITC81DB_ImageDll/Resources/chnMainModbusScreen.png new file mode 100644 index 0000000..dd477be Binary files /dev/null and b/ITC81DB_ImageDll/ITC81DB_ImageDll/Resources/chnMainModbusScreen.png differ diff --git a/ITC81DB_ImageDll/ITC81DB_ImageDll/Resources/engMainModbusScreen.png b/ITC81DB_ImageDll/ITC81DB_ImageDll/Resources/engMainModbusScreen.png new file mode 100644 index 0000000..8410e2e Binary files /dev/null and b/ITC81DB_ImageDll/ITC81DB_ImageDll/Resources/engMainModbusScreen.png differ diff --git a/ITC81DB_ImageDll/ITC81DB_ImageDll/Resources/gerMainModbusScreen.png b/ITC81DB_ImageDll/ITC81DB_ImageDll/Resources/gerMainModbusScreen.png new file mode 100644 index 0000000..6f43ac9 Binary files /dev/null and b/ITC81DB_ImageDll/ITC81DB_ImageDll/Resources/gerMainModbusScreen.png differ diff --git a/ITC81DB_ImageDll/ITC81DB_ImageDll/Resources/korMainModbusScreen.png b/ITC81DB_ImageDll/ITC81DB_ImageDll/Resources/korMainModbusScreen.png new file mode 100644 index 0000000..862453f Binary files /dev/null and b/ITC81DB_ImageDll/ITC81DB_ImageDll/Resources/korMainModbusScreen.png differ diff --git a/ITC81DB_ImageDll/ITC81DB_ImageDll/Resources/rusMainModbusScreen.png b/ITC81DB_ImageDll/ITC81DB_ImageDll/Resources/rusMainModbusScreen.png new file mode 100644 index 0000000..d34a955 Binary files /dev/null and b/ITC81DB_ImageDll/ITC81DB_ImageDll/Resources/rusMainModbusScreen.png differ diff --git a/ITC81DB_ImageDll/ITC81DB_ImageDll/bin/Release/ITC81DB_2H_ImageDll.dll b/ITC81DB_ImageDll/ITC81DB_ImageDll/bin/Release/ITC81DB_2H_ImageDll.dll index d8a2501..ea666fa 100644 Binary files a/ITC81DB_ImageDll/ITC81DB_ImageDll/bin/Release/ITC81DB_2H_ImageDll.dll and b/ITC81DB_ImageDll/ITC81DB_ImageDll/bin/Release/ITC81DB_2H_ImageDll.dll differ