using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Modbus; using Modbus.Device; using Modbus.Data; using System.Net; using System.Net.Sockets; using System.IO.Ports; namespace Input_Status { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private SerialPort comPort = new SerialPort(); IModbusSerialMaster master; private void Form1_Load(object sender, EventArgs e) { cmbBaud.SelectedIndex = 7; cmbDataBit.SelectedIndex = 1; cmbParity.SelectedIndex = 0; cmbStopBit.SelectedIndex = 0; foreach (string s in SerialPort.GetPortNames()) cmbPort.Items.Add(s); cmbPort.SelectedIndex = 0; } private void timerScan_Tick(object sender, EventArgs e) { CheckBox[] checkbox = new CheckBox[] { ckbCH0, ckbCH1, ckbCH2, ckbCH3, ckbCH4, ckbCH5, ckbCH6, ckbCH7, ckbCH8, ckbCH9 }; try { string sKey = ""; byte slaveID = 1; ushort startAddress = 0; ushort numInputs = ushort.Parse(txtChannelNumber.Text); bool[] inputs = master.ReadCoils(slaveID, startAddress, numInputs); for (int i = 0; i < numInputs; i++) { sKey += i.ToString() + "=>" + Convert.ToInt32(inputs[i]) + "\r\r"; if ((i + 1) % 3 == 0) sKey += "\n"; } txtMsg.Text = sKey; int index = 0; if (numInputs > 10) index = 10; else index = numInputs; for (int i = 0; i < index; i++)//input channel statue { if (Convert.ToInt32(inputs[i]) > 0) { checkbox[i].Checked = true; } else checkbox[i].Checked = false; } } catch (Exception ex) { btCloseCOM_Click(sender, e); MessageBox.Show(ex.Message); } } private void txtChannelNumber_TextChanged(object sender, EventArgs e) { } private void ckbCH0_CheckStateChanged(object sender, EventArgs e) { ushort Address = 0;// byte slaveID = 1; if (ckbCH0.Checked == true) { master.WriteSingleCoil(slaveID, Address, true); } else master.WriteSingleCoil(slaveID, Address, false); } private void ckbCH1_CheckStateChanged(object sender, EventArgs e) { ushort Address = 1;// byte slaveID = 1; if (ckbCH1.Checked == true) { master.WriteSingleCoil(slaveID, Address, true); } else master.WriteSingleCoil(slaveID, Address, false); } private void ckbCH2_CheckStateChanged_1(object sender, EventArgs e) { ushort Address = 2;// byte slaveID = 1; if (ckbCH2.Checked == true) { master.WriteSingleCoil(slaveID, Address, true); } else master.WriteSingleCoil(slaveID, Address, false); } private void ckbCH3_CheckStateChanged(object sender, EventArgs e) { ushort Address = 3;// byte slaveID = 1; if (ckbCH3.Checked == true) { master.WriteSingleCoil(slaveID, Address, true); } else master.WriteSingleCoil(slaveID, Address, false); } private void ckbCH4_CheckStateChanged(object sender, EventArgs e) { ushort Address = 4;// byte slaveID = 1; if (ckbCH4.Checked == true) { master.WriteSingleCoil(slaveID, Address, true); } else master.WriteSingleCoil(slaveID, Address, false); } private void ckbCH5_CheckStateChanged(object sender, EventArgs e) { ushort Address = 5;// byte slaveID = 1; if (ckbCH5.Checked == true) { master.WriteSingleCoil(slaveID, Address, true); } else master.WriteSingleCoil(slaveID, Address, false); } private void ckbCH6_CheckStateChanged(object sender, EventArgs e) { ushort Address = 6;// byte slaveID = 1; if (ckbCH6.Checked == true) { master.WriteSingleCoil(slaveID, Address, true); } else master.WriteSingleCoil(slaveID, Address, false); } private void ckbCH7_CheckStateChanged(object sender, EventArgs e) { ushort Address = 7;// byte slaveID = 1; if (ckbCH7.Checked == true) { master.WriteSingleCoil(slaveID, Address, true); } else master.WriteSingleCoil(slaveID, Address, false); } private void ckbCH8_CheckStateChanged(object sender, EventArgs e) { ushort Address = 8;// byte slaveID = 1; if (ckbCH8.Checked == true) { master.WriteSingleCoil(slaveID, Address, true); } else master.WriteSingleCoil(slaveID, Address, false); } private void ckbCH9_CheckStateChanged(object sender, EventArgs e) { ushort Address = 9;// byte slaveID = 1; if (ckbCH9.Checked == true) { master.WriteSingleCoil(slaveID, Address, true); } else master.WriteSingleCoil(slaveID, Address, false); } private void butONOFF_Click(object sender, EventArgs e) { ushort Address = ushort.Parse(txtChannel.Text);//chanell bigger than 10 byte slaveID = 1; if (butONOFF.Text == "ON") { master.WriteSingleCoil(slaveID, Address, true); butONOFF.Text = "OFF"; } else { master.WriteSingleCoil(slaveID, Address, false); butONOFF.Text = "ON"; } } private void textBox8_TextChanged(object sender, EventArgs e) { } private void txtChannel_TextChanged_1(object sender, EventArgs e) { butONOFF.Text = "ON"; } private void btOpenCOM_Click(object sender, EventArgs e) { comPort.PortName = cmbPort.Text; comPort.BaudRate = int.Parse(cmbBaud.Text); comPort.DataBits = int.Parse(cmbDataBit.Text); if (cmbParity.Text.Substring(0, 1) == "0") { comPort.Parity = Parity.None; } else if (cmbParity.Text.Substring(0, 1) == "1") { comPort.Parity = Parity.Odd; } else if (cmbParity.Text.Substring(0, 1) == "2") { comPort.Parity = Parity.Even; } if (cmbStopBit.Text == "0") { comPort.StopBits = StopBits.None; } else if (cmbStopBit.Text == "1") { comPort.StopBits = StopBits.One; } comPort.Open(); master = ModbusSerialMaster.CreateRtu(comPort); master.Transport.Retries = 0; master.Transport.ReadTimeout = 200; btOpenCOM.Enabled = false; btCloseCOM.Enabled = true; timerScan.Enabled = true; txtChannelNumber.Enabled = false; if (Int16.Parse(txtChannelNumber.Text) > 10) { label4.Enabled = true; txtChannel.Enabled = true; butONOFF.Enabled = true; } CheckBox[] checkbox = new CheckBox[] { ckbCH0, ckbCH1, ckbCH2, ckbCH3, ckbCH4, ckbCH5, ckbCH6, ckbCH7, ckbCH8, ckbCH9 }; for (int i = 0; i < 10; i++) { checkbox[i].Enabled = true; } } private void btCloseCOM_Click(object sender, EventArgs e) { comPort.Close(); btOpenCOM.Enabled = true; btCloseCOM.Enabled = false; timerScan.Enabled = false; txtChannelNumber.Enabled = true; label4.Enabled = false; txtChannel.Enabled = false; butONOFF.Enabled = false; CheckBox[] checkbox = new CheckBox[] { ckbCH0, ckbCH1, ckbCH2, ckbCH3, ckbCH4, ckbCH5, ckbCH6, ckbCH7, ckbCH8, ckbCH9 }; for (int i = 0; i < 10; i++) { checkbox[i].Enabled = false; } } private void Form1_Closed(object sender, EventArgs e) { comPort.Close(); } } }