常用方法
using Modbus;
using System;
using System.Linq;
public class ModbusHelper
{
private IModbusMaster modbusMaster;
public ModbusHelper(IModbusMaster modbusMaster)
{
this.modbusMaster = modbusMaster;
}
public ushort[] ReadHoldingRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
{
return modbusMaster.ReadHoldingRegisters(slaveAddress, startAddress, numberOfPoints);
}
public void WriteSingleRegister(byte slaveAddress, ushort address, ushort value)
{
modbusMaster.WriteSingleRegister(slaveAddress, address, value);
}
public void WriteMultipleRegisters(byte slaveAddress, ushort startAddress, ushort[] data)
{
modbusMaster.WriteMultipleRegisters(slaveAddress, startAddress, data);
}
public bool[] ReadCoils(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
{
return modbusMaster.ReadCoils(slaveAddress, startAddress, numberOfPoints);
}
public void WriteSingleCoil(byte slaveAddress, ushort address, bool value)
{
modbusMaster.WriteSingleCoil(slaveAddress, address, value);
}
public void WriteMultipleCoils(byte slaveAddress, ushort startAddress, bool[] data)
{
modbusMaster.WriteMultipleCoils(slaveAddress, startAddress, data);
}
public ushort[] ReadInputRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
{
return modbusMaster.ReadInputRegisters(slaveAddress, startAddress, numberOfPoints);
}
public bool[] ReadInputStatus(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
{
return modbusMaster.ReadInputStatus(slaveAddress, startAddress, numberOfPoints);
}
}
例子
ReadHoldingRegisters
using System;
using System.Windows.Forms;
using Modbus;
using Modbus.Serial;
using System.IO.Ports;
namespace ModbusRtuExample
{
public partial class MainForm : Form
{
private IModbusMaster modbusMaster;
private SerialPort serialPort;
public MainForm()
{
InitializeComponent();
InitializeModbus();
}
private void InitializeModbus()
{
serialPort = new SerialPort("COM1");
serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.DataBits = 8;
serialPort.Open();
modbusMaster = ModbusSerialMaster.CreateRtu(serialPort);
modbusMaster.Transport.ReadTimeout = 1000;
modbusMaster.Transport.Retries = 3;
modbusMaster.Transport.WaitToRetryMilliseconds = 50;
}
private void btnReadHoldingRegisters_Click(object sender, EventArgs e)
{
try
{
byte slaveAddress = 1;
ushort startAddress = 0;
ushort numberOfPoints = 10;
ushort[] data = modbusMaster.ReadHoldingRegisters(slaveAddress, startAddress, numberOfPoints);
txtResult.Text = string.Join(", ", data);
}
catch (Exception ex)
{
MessageBox.Show("读取失败:" + ex.Message);
}
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (modbusMaster != null)
modbusMaster.Dispose();
if (serialPort != null && serialPort.IsOpen)
serialPort.Close();
}
}
}
WriteSingleRegister
using System;
using System.Windows.Forms;
using Modbus;
using Modbus.Serial;
using System.IO.Ports;
namespace ModbusRtuWriteExample
{
public partial class MainForm : Form
{
private IModbusMaster modbusMaster;
private SerialPort serialPort;
public MainForm()
{
InitializeComponent();
InitializeModbus();
}
private void InitializeModbus()
{
serialPort = new SerialPort("COM1");
serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.DataBits = 8;
serialPort.Open();
modbusMaster = ModbusSerialMaster.CreateRtu(serialPort);
modbusMaster.Transport.ReadTimeout = 1000;
modbusMaster.Transport.Retries = 3;
modbusMaster.Transport.WaitToRetryMilliseconds = 50;
}
private void btnWriteSingleRegister_Click(object sender, EventArgs e)
{
try
{
byte slaveAddress = 1;
ushort address = 0;
ushort valueToWrite = Convert.ToUInt16(txtValueToWrite.Text);
modbusMaster.WriteSingleRegister(slaveAddress, address, valueToWrite);
MessageBox.Show("写入成功");
}
catch (Exception ex)
{
MessageBox.Show("写入失败:" + ex.Message);
}
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (modbusMaster != null)
modbusMaster.Dispose();
if (serialPort != null && serialPort.IsOpen)
serialPort.Close();
}
}
}
WriteMultipleRegisters
using System;
using System.Windows.Forms;
using Modbus;
using Modbus.Serial;
using System.IO.Ports;
namespace ModbusRtuWriteMultipleRegistersExample
{
public partial class MainForm : Form
{
private IModbusMaster modbusMaster;
private SerialPort serialPort;
public MainForm()
{
InitializeComponent();
InitializeModbus();
}
private void InitializeModbus()
{
serialPort = new SerialPort("COM1");
serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.DataBits = 8;
serialPort.Open();
modbusMaster = ModbusSerialMaster.CreateRtu(serialPort);
modbusMaster.Transport.ReadTimeout = 1000;
modbusMaster.Transport.Retries = 3;
modbusMaster.Transport.WaitToRetryMilliseconds = 50;
}
private void btnWriteMultipleRegisters_Click(object sender, EventArgs e)
{
try
{
byte slaveAddress = 1;
ushort startAddress = 0;
ushort[] dataToWrite = new ushort[] { 100, 200, 300, 400, 500 };
modbusMaster.WriteMultipleRegisters(slaveAddress, startAddress, dataToWrite);
MessageBox.Show("写入成功");
}
catch (Exception ex)
{
MessageBox.Show("写入失败:" + ex.Message);
}
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (modbusMaster != null)
modbusMaster.Dispose();
if (serialPort != null && serialPort.IsOpen)
serialPort.Close();
}
}
}
ReadCoils
using System;
using System.Windows.Forms;
using Modbus;
using Modbus.Serial;
using System.IO.Ports;
namespace ModbusRtuReadCoilsExample
{
public partial class MainForm : Form
{
private IModbusMaster modbusMaster;
private SerialPort serialPort;
public MainForm()
{
InitializeComponent();
InitializeModbus();
}
private void InitializeModbus()
{
serialPort = new SerialPort("COM1");
serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.DataBits = 8;
serialPort.Open();
modbusMaster = ModbusSerialMaster.CreateRtu(serialPort);
modbusMaster.Transport.ReadTimeout = 1000;
modbusMaster.Transport.Retries = 3;
modbusMaster.Transport.WaitToRetryMilliseconds = 50;
}
private void btnReadCoils_Click(object sender, EventArgs e)
{
try
{
byte slaveAddress = 1;
ushort startAddress = 0;
ushort numberOfPoints = 10;
bool[] coilStatus = modbusMaster.ReadCoils(slaveAddress, startAddress, numberOfPoints);
txtCoilStatus.Text = string.Join(", ", coilStatus);
}
catch (Exception ex)
{
MessageBox.Show("读取失败:" + ex.Message);
}
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (modbusMaster != null)
modbusMaster.Dispose();
if (serialPort != null && serialPort.IsOpen)
serialPort.Close();
}
}
}
WriteSingleCoil
using System;
using System.Windows.Forms;
using Modbus;
using Modbus.Serial;
using System.IO.Ports;
namespace ModbusRtuWriteSingleCoilExample
{
public partial class MainForm : Form
{
private IModbusMaster modbusMaster;
private SerialPort serialPort;
public MainForm()
{
InitializeComponent();
InitializeModbus();
}
private void InitializeModbus()
{
serialPort = new SerialPort("COM1");
serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.DataBits = 8;
serialPort.Open();
modbusMaster = ModbusSerialMaster.CreateRtu(serialPort);
modbusMaster.Transport.ReadTimeout = 1000;
modbusMaster.Transport.Retries = 3;
modbusMaster.Transport.WaitToRetryMilliseconds = 50;
}
private void btnWriteSingleCoil_Click(object sender, EventArgs e)
{
try
{
byte slaveAddress = 1;
ushort address = 0;
bool valueToWrite = chkCoilStatus.Checked;
modbusMaster.WriteSingleCoil(slaveAddress, address, valueToWrite);
MessageBox.Show("写入成功");
}
catch (Exception ex)
{
MessageBox.Show("写入失败:" + ex.Message);
}
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (modbusMaster != null)
modbusMaster.Dispose();
if (serialPort != null && serialPort.IsOpen)
serialPort.Close();
}
}
}
WriteMultipleCoils
using System;
using System.Windows.Forms;
using Modbus;
using Modbus.Serial;
using System.IO.Ports;
namespace ModbusRtuWriteMultipleCoilsExample
{
public partial class MainForm : Form
{
private IModbusMaster modbusMaster;
private SerialPort serialPort;
public MainForm()
{
InitializeComponent();
InitializeModbus();
}
private void InitializeModbus()
{
serialPort = new SerialPort("COM1");
serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.DataBits = 8;
serialPort.Open();
modbusMaster = ModbusSerialMaster.CreateRtu(serialPort);
modbusMaster.Transport.ReadTimeout = 1000;
modbusMaster.Transport.Retries = 3;
modbusMaster.Transport.WaitToRetryMilliseconds = 50;
}
private void btnWriteMultipleCoils_Click(object sender, EventArgs e)
{
try
{
byte slaveAddress = 1;
ushort startAddress = 0;
bool[] dataToWrite = new bool[] { true, false, true, false, true };
modbusMaster.WriteMultipleCoils(slaveAddress, startAddress, dataToWrite);
MessageBox.Show("写入成功");
}
catch (Exception ex)
{
MessageBox.Show("写入失败:" + ex.Message);
}
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (modbusMaster != null)
modbusMaster.Dispose();
if (serialPort != null && serialPort.IsOpen)
serialPort.Close();
}
}
}
ReadInputRegisters
using System;
using System.Windows.Forms;
using Modbus;
using Modbus.Serial;
using System.IO.Ports;
namespace ModbusRtuReadInputRegistersExample
{
public partial class MainForm : Form
{
private IModbusMaster modbusMaster;
private SerialPort serialPort;
public MainForm()
{
InitializeComponent();
InitializeModbus();
}
private void InitializeModbus()
{
serialPort = new SerialPort("COM1");
serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.DataBits = 8;
serialPort.Open();
modbusMaster = ModbusSerialMaster.CreateRtu(serialPort);
modbusMaster.Transport.ReadTimeout = 1000;
modbusMaster.Transport.Retries = 3;
modbusMaster.Transport.WaitToRetryMilliseconds = 50;
}
private void btnReadInputRegisters_Click(object sender, EventArgs e)
{
try
{
byte slaveAddress = 1;
ushort startAddress = 0;
ushort numberOfPoints = 10;
ushort[] inputRegisterData = modbusMaster.ReadInputRegisters(slaveAddress, startAddress, numberOfPoints);
txtInputRegisterData.Text = string.Join(", ", inputRegisterData);
}
catch (Exception ex)
{
MessageBox.Show("读取失败:" + ex.Message);
}
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (modbusMaster != null)
modbusMaster.Dispose();
if (serialPort != null && serialPort.IsOpen)
serialPort.Close();
}
}
}
ReadInputStatus
using System;
using System.Windows.Forms;
using Modbus;
using Modbus.Serial;
using System.IO.Ports;
namespace ModbusRtuReadInputStatusExample
{
public partial class MainForm : Form
{
private IModbusMaster modbusMaster;
private SerialPort serialPort;
public MainForm()
{
InitializeComponent();
InitializeModbus();
}
private void InitializeModbus()
{
serialPort = new SerialPort("COM1");
serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.DataBits = 8;
serialPort.Open();
modbusMaster = ModbusSerialMaster.CreateRtu(serialPort);
modbusMaster.Transport.ReadTimeout = 1000;
modbusMaster.Transport.Retries = 3;
modbusMaster.Transport.WaitToRetryMilliseconds = 50;
}
private void btnReadInputStatus_Click(object sender, EventArgs e)
{
try
{
byte slaveAddress = 1;
ushort startAddress = 0;
ushort numberOfPoints = 10;
bool[] inputStatusData = modbusMaster.ReadInputStatus(slaveAddress, startAddress, numberOfPoints);
txtInputStatusData.Text = string.Join(", ", inputStatusData);
}
catch (Exception ex)
{
MessageBox.Show("读取失败:" + ex.Message);
}
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (modbusMaster != null)
modbusMaster.Dispose();
if (serialPort != null && serialPort.IsOpen)
serialPort.Close();
}
}
}