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(); } public const int Port = 502; private void timerScan_Tick_1(object sender, EventArgs e) { try { byte slaveID = 1; ushort startAddress = 0; ushort numInputs = ushort.Parse(txtChannelNumber.Text); ushort[] inputs = master.ReadInputRegisters(slaveID, startAddress, numInputs); for (int i = 0; i < numInputs; i++) { points.Rows[i][1] = Convert.ToInt32(inputs[i]);//input the value to data table } } catch (Exception ex) { btCloseCOM_Click(sender, e); MessageBox.Show(ex.Message); } } private SerialPort comPort = new SerialPort(); IModbusSerialMaster master; System.Data.DataTable points = new System.Data.DataTable("Points"); DataGridTableStyle tableStyle = new DataGridTableStyle(); 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; try { points.Columns.Add(new DataColumn("Channel", typeof(int)));//make a columns points.Columns.Add(new DataColumn("Value", typeof(int))); dataGrid1.DataSource = points; tableStyle.MappingName = "Points"; dataGrid1.TableStyles.Add(tableStyle); } catch (Exception ex) { dataGrid1.TableStyles["Points"].Dispose(); tableStyle.Dispose(); } } private void btOpenCOM_Click_1(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; ushort numInputs = ushort.Parse(txtChannelNumber.Text); for (int i = 0; i < numInputs; i++) { points.Rows.Add(new object[] { i, 0 });//make a Row; } } private void btCloseCOM_Click(object sender, EventArgs e) { comPort.Close(); btOpenCOM.Enabled = true; btCloseCOM.Enabled = false; timerScan.Enabled = false; txtChannelNumber.Enabled = true; points.Rows.Clear();//clear row } private void txtMsg_TextChanged(object sender, EventArgs e) { } private void Form1_Closed(object sender, EventArgs e) { comPort.Close(); } } }