使用NModbus4实现Modbus RTU通讯

一、右键项目—点击管理NuGet程序包
在这里插入图片描述
二、安装NModbus4
三、引用

using Modbus.Device;
using System.IO;
using System.IO.Ports;

四、初始化串口

 //初始化串口---方式一
 private void CreateCom()
 {
      SerialPort port = new SerialPort();
      port.PortName = "COM3";
      port.BaudRate = 9600;
      port.Parity = Parity.None;
      port.DataBits = 8;
      port.StopBits = StopBits.One;
}
private SerialPort serialPort;
private ModbusSerialMaster serialMaster;
private void ModbusRtuClient(string portName,int baudRate,Parity parity=Parity.None,int dataBits=8,StopBits stopBits = StopBits.One) 
{
     //初始化串口---方式二
     serialPort = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
     //打开串口
     if (serialPort.IsOpen)
     {
         serialPort.Open();
         //创建Modbus Rtu主站
         serialMaster = ModbusSerialMaster.CreateRtu(serialPort);
         serialMaster.Transport.ReadTimeout = 1000;//读取数据超时1000ms
         serialMaster.Transport.WriteTimeout = 1000;//写数据超时1000ms
         serialMaster.Transport.Retries = 3;//重试次数
         serialMaster.Transport.WaitToRetryMilliseconds = 500;//重试间隔500ms
      }
      else
      {
           serialPort.Close();
           serialPort.Open();
           serialMaster = ModbusSerialMaster.CreateRtu(serialPort);
       }
}

五、写单个寄存器

private void Button_Click_Forw(object sender, RoutedEventArgs e)
{
     ModbusRtuClient("COM3", 9600, Parity.None, 8, StopBits.One);
     //设置从设备地址和寄存器地址以及值
     ushort slaveAddress = 1;
     ushort startAddress = 4;
     ushort value = 0x0000;
     //将值写入寄存器中
     serialMaster.WriteSingleRegister((byte)slaveAddress, startAddress, value);
     serialPort.Close();
}
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中的NModbus是一个流行的.NET库,用于读写Modbus RTU(Remote Terminal Unit)通信协议的数据。Modbus RTU是一种工业通讯协议,常用于自动化控制系统中设备间的通信。使用NModbus进行读取操作,你需要以下几个步骤: 1. 引入NuGet包:在你的C#项目中,首先需要安装NModbus的NuGet包。你可以通过NuGet Package Manager或命令行(`dotnet add package NModbus`)来添加。 ```csharp using NModbus; using NModbus.Packets; ``` 2. 创建连接:你需要创建一个`NModbusSerialMaster`对象,指定Modbus设备的串口配置,如波特率、校验方式等。 ```csharp string portName = "COM1"; // 替换为实际的串口号 int baudRate = 9600; // 通常Modbus RTU的默认波特率 NModbusSerialSettings settings = new NModbusSerialSettings { PortName = portName, BaudRate = baudRate, DataBits = 8, StopBits = StopBits.One, Parity = Parity.None }; ModbusSerialMaster master = new ModbusSerialMaster(settings); ``` 3. 发送请求:调用`ReadCoils()`或`ReadHoldingRegisters()`方法来读取寄存器数据,根据需要选择相应的函数代码。 ```csharp ushort_slaveId = 1; // 设备的(slave ID) ushort_address = 0x0001; // 需要读取的寄存器地址 ushort numberOfPoints = 1; // 一次读取的点数 ushort[] coilsOrValues = await master.ReadCoilsAsync(slaveId, address, numberOfPoints); ``` 4. 解析响应:收到数据后,`coilsOrValues`数组会包含读取到的结果。根据数据类型(布尔值(Coils)或数值(Registers))进行解析。 5. 关闭连接:完成操作后,记得关闭连接以释放资源。 ```csharp master.Close(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值