Nmodbus4使用示例

Nmodbus4是一套开源的驱动程序,支持ModbusRTU,,ModbusASCII,ModbusTCP等,支持主从站模式,这里介绍基本的ModbusRTU主站的使用方法,详细的使用方法请参见帮助文档。

驱动文件和帮助文档下载地址:

链接:https://pan.baidu.com/s/1eK16kj9M19QvQwfT-Bvo1Q

提取码:o923

我们读取和写入个保持寄存器的的一个值。

代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.IO;

using System.IO.Ports;

using Modbus;

using Modbus.Data;

using Modbus.Device;

using Modbus.Extensions;

using Modbus.IO;

using Modbus.Message;

using Modbus.Utility;

using System.Threading;

 

namespace WindowsFormsApplication9

{


public
partial
class
Form1 : Form

{


public Form1()

{

InitializeComponent();

}

 


//定义主站


ModbusSerialMaster master = null;


private
void button1_Click(object sender, EventArgs e)

{


//读取保持寄存器0的值


ushort[] hr= master.ReadHoldingRegisters(1,0,1);

textBox1.Text = hr[0].ToString();

}

 


private
void Form1_Load(object sender, EventArgs e)

{


//初始化串口和主站

serialPort1.PortName = “COM5”;

serialPort1.BaudRate = 9600;

serialPort1.DataBits = 8;

serialPort1.StopBits = StopBits.One;

serialPort1.Parity = Parity.None;

serialPort1.Open();

 

master = ModbusSerialMaster.CreateRtu(serialPort1);

}

 


private
void button2_Click(object sender, EventArgs e)

{


//写入保持寄存器1,如从站返回错误,需要处理


try

{

master.WriteSingleRegister(1, 1, Convert.ToUInt16(textBox2.Text));

}


catch (SlaveException ex)

{


MessageBox.Show(ex.Message);

}

 

 

}

 


private
void Form1_FormClosed(object sender, FormClosedEventArgs e)

{

serialPort1.Close();

master.Dispose();

}

 


private
async
void button3_Click(object sender, EventArgs e)

{


//异步读取保持寄存器0的值


ushort[] hr = await master.ReadHoldingRegistersAsync(1, 0, 1);

textBox1.Text = hr[0].ToString();

}

}

}