C# 使用NModbus4、EasyModbus进行串口ModbusRTU数据收发,立即获取返回响应
一、先介绍NModbus4,NuGet安装NModbus4稳定版v2.1.0
1.新建类NModbus4Helper.cs
添加命名空间
using Modbus.Device;
using Modbus.Message;
byte _DeviceId = 8;
ModbusMaster master;
-
/// <summary>
-
/// 读取单个寄存器
-
/// </summary>
-
/// <param name="regAddr"></param>
-
/// <param name="value"></param>
-
/// <returns></returns>
-
public byte[] ReadSingleRegister(ushort regAddr)
-
{
-
try
-
{
-
ReadHoldingInputRegistersRequest readRegistersReq = new ReadHoldingInputRegistersRequest(0x03, _DeviceId, regAddr, 1);
-
//获取响应报文
-
ReadHoldingInputRegistersResponse readRegistersRes = master.ExecuteCustomMessage<ReadHoldingInputRegistersResponse>(readRegistersReq);
-
return readRegistersRes.ProtocolDataUnit;
-
}
-
catch (Exception ex)
-
{
-
return null;
-
}
-
}
-
/// <summary>
-
/// 读取多个保持型寄存器
-
/// </summary>
-
/// <returns></returns>
-
public Task<byte[]> ReadHoldingRegisters(ushort regStartAddr, ushort regEndAddr)
-
{
-
try
-
{
-
ushort Lenth = (ushort)(regEndAddr - regStartAddr 1);
-
return Task.Run(() =>
-
{
-
ReadHoldingInputRegistersRequest readRegistersReq = new ReadHoldingInputRegistersRequest(0x03, _DeviceId, regStartAddr, Lenth);
-
//获取响应报文
-
ReadHoldingInputRegistersResponse readRegistersRes = master.ExecuteCustomMessage<ReadHoldingInputRegistersResponse>(readRegistersReq);
-
return readRegistersRes.ProtocolDataUnit;
-
});
-
}
-
catch (Exception ex)
-
{
-
return null;
-
}
-
}
-
public byte[] ReadRegister(ushort regAddr)
-
{
-
try
-
{
-
ushort Lenth = 1;
-
ushort[] rec = master.ReadHoldingRegisters(_DeviceId, regAddr, Lenth);
-
byte[] recByte = new byte[rec.Length];
-
Buffer.BlockCopy(rec, 0, recByte, 0, rec.Length);
-
return recByte;
-
}
-
catch (Exception ex)
-
{
-
return null;
-
}
-
}
-
-
public byte[] ReadRegisters(ushort regStartAddr, ushort regEndAddr)
-
{
-
try
-
{
-
ushort Lenth = (ushort)(regEndAddr - regStartAddr 1);
-
ushort[] rec = master.ReadHoldingRegisters(_DeviceId, regStartAddr, Lenth);
-
byte[] recByte = new byte[rec.Length];
-
Buffer.BlockCopy(rec, 0, recByte, 0, rec.Length);
-
return recByte;
-
}
-
catch (Exception ex)
-
{
-
return null;
-
}
-
}
二、使用EasyModbus,NuGet安装EasyModbusTCP 5.6.0
添加命名空间using EasyModbus;
-
byte _DeviceId = 8;
-
ModbusClient modbusClient = null;
-
object _transferLockObj = new object();
-
-
public void OpenSerialPort()
-
{
-
try
-
{
-
modbusClient = new ModbusClient("COM1");
-
modbusClient.UnitIdentifier = _DeviceId;
-
modbusClient.Baudrate = _baudRate;
-
modbusClient.Parity = Parity.None;
-
modbusClient.StopBits = StopBits.One;
-
modbusClient.ConnectionTimeout = 500;
-
modbusClient.Connect();
-
}
-
catch (Exception ex)
-
{
-
}
-
}
-
-
/// <summary>
-
/// 写入单个寄存器并获取响应
-
/// </summary>
-
public byte[] WriteSingleRegister(ushort regAddr, ushort value)
-
{
-
try
-
{
-
lock (_transferLockObj)
-
{
-
modbusClient.receiveData = null;
-
modbusClient.WriteSingleRegister(regAddr, value);
-
byte[] Rec = modbusClient.receiveData;
-
return Rec;
-
}
-
}
-
catch (Exception ex)
-
{
-
return null;
-
}
-
}
-
-
/// <summary>
-
/// 读取寄存器
-
/// </summary>
-
public int[] ReadRegisters(ushort regStartAddr, ushort regEndAddr)
-
{
-
try
-
{
-
lock (_transferLockObj)
-
{
-
ushort Lenth = (ushort)(regEndAddr - regStartAddr 1);
-
int[] rec = modbusClient.ReadHoldingRegisters(regStartAddr, Lenth);
-
return rec;
-
}
-
}
-
catch (Exception ex)
-
{
-
return null;
-
}
-
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhickjie
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
excel打印预览压线压字怎么办
PHP中文网 06-22