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 { public Form1() { InitializeComponent(); } //定义主站 ModbusSerialMaster master = null; private { //读取保持寄存器0的值 ushort[] hr= master.ReadHoldingRegisters(1,0,1); textBox1.Text = hr[0].ToString(); } private { //初始化串口和主站 serialPort1.PortName = “COM5”; serialPort1.BaudRate = 9600; serialPort1.DataBits = 8; serialPort1.StopBits = StopBits.One; serialPort1.Parity = Parity.None; serialPort1.Open(); master = ModbusSerialMaster.CreateRtu(serialPort1); } private { //写入保持寄存器1,如从站返回错误,需要处理 try { master.WriteSingleRegister(1, 1, Convert.ToUInt16(textBox2.Text)); } catch (SlaveException ex) { MessageBox.Show(ex.Message); } } private { serialPort1.Close(); master.Dispose(); } private { //异步读取保持寄存器0的值 ushort[] hr = await master.ReadHoldingRegistersAsync(1, 0, 1); textBox1.Text = hr[0].ToString(); } } } |