工业自动化领域,Modbus协议因其简单性和可靠性成为了设备间通信的事实标准之一。随着.NET平台的发展,C#语言凭借其强大的功能和易用性,在工业控制软件开发中也占据了重要地位。
本文将介绍两个流行的C#库——NModbus4和Modbus.Net,并通过对比它们的核心特点、适用场景以及代码示例,帮助大家选择最适合项目的工具。
这是C#中使用最广泛、最经典的Modbus库之一,它是原始NModbus项目的一个活跃维护分支,支持完整的Modbus协议栈。
支持 Modbus RTU、Modbus TCP、Modbus ASCII
支持主站 (Master) 和从站 (Slave) 模式
支持常用功能码
轻量、稳定、文档丰富
Install-Package NModbus4
using System;
using System.Net.Sockets;
using NModbus;
classModbusTcpExample
{
static void Main()
{
// 创建TCP客户端并连接到Modbus TCP服务器
TcpClient tcpClient = new TcpClient();
tcpClient.Connect("127.0.0.1", 502); // Modbus TCP默认端口502
// 创建Modbus主站
IModbusMaster master = ModbusIpMaster.CreateIp(tcpClient);
try
{
// 读取保持寄存器(功能码03)
ushort[] registers = master.ReadHoldingRegisters(
slaveAddress: 1,
startAddress: 0,
numberOfPoints: 10);
// 输出结果
Console.WriteLine("读取到的寄存器值:");
for (int i = 0; i < registers.Length; i++)
{
Console.WriteLine($"寄存器 {i}: {registers[i]}");
}
}
catch (Exception ex)
{
Console.WriteLine($"读取失败:{ex.Message}");
}
finally
{
// 释放资源
tcpClient.Close();
}
}
}
这是一个更现代、设计更灵活的Modbus库,它不仅支持标准Modbus,还扩展了多种工业通信协议,并且采用模块化设计,易于扩展和定制。
支持 Modbus RTU/TCP/ASCII,还扩展支持 Modbus RTU over TCP
内置数据类型转换
支持异步操作(async/await),适配现代 C# 开发模式
可扩展支持其他协议
内置断线重连机制,稳定性更好
Install-Package Modbus.Net
using System;
using System.Threading.Tasks;
using Modbus.Net;
classModbusNetExample
{
static async Task Main()
{
// 创建Modbus TCP客户端
ModbusTcpProtocol modbusClient = new ModbusTcpProtocol(
ipAddress: "127.0.0.1",
port: 502,
slaveAddress: 1);
try
{
// 异步读取保持寄存器(自动处理数据转换)
var readResult = await modbusClient.GetInputAsync(
startAddress: 0,
length: 10,
registerType: RegisterType.HoldingRegister);
Console.WriteLine("读取到的寄存器值:");
foreach (var item in readResult)
{
Console.WriteLine($"地址 {item.Key}: {item.Value}");
}
// 异步写入单个寄存器
await modbusClient.SetOutputAsync(0, 1234, RegisterType.HoldingRegister);
Console.WriteLine("寄存器写入成功");
}
catch (Exception ex)
{
Console.WriteLine($"操作失败:{ex.Message}");
}
finally
{
// 释放资源
modbusClient.Dispose();
}
}
}
通过对NModbus4和Modbus.Net的分析,我们可以得出以下结论:
NModbus4 是C#中最经典的Modbus库,轻量稳定、文档丰富,适合简单场景和传统同步开发。
Modbus.Net 是更现代的模块化库,原生支持异步、自动数据转换和断线重连,适合复杂项目和现代C#开发模式。
两者均为开源免费库,可根据项目的复杂度、开发模式(同步 / 异步)和扩展需求选择。
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
如果你追求 简单、稳定、快速上手,或正在维护老项目 → 选择 NModbus4
如果你需要 异步通信、自动数据解析、高可用性,或构建新一代工业软件 → 选择 Modbus.Net
版权声明: 本站资源均来自互联网或会员发布,如果侵犯了您的权益请与我们联系,我们将在24小时内删除!谢谢!联系QQ:76900276
转载请注明: C# 开发 Modbus 通信?这两大开源库你必须了解