主页 > 精品文章 > 后端开发 > C# 开发 Modbus 通信?这两大开源库你必须了解

标签推荐

>> 更多

C# 开发 Modbus 通信?这两大开源库你必须了解

 2026-03-16

前言

工业自动化领域,Modbus协议因其简单性和可靠性成为了设备间通信的事实标准之一。随着.NET平台的发展,C#语言凭借其强大的功能和易用性,在工业控制软件开发中也占据了重要地位。

本文将介绍两个流行的C#库——NModbus4和Modbus.Net,并通过对比它们的核心特点、适用场景以及代码示例,帮助大家选择最适合项目的工具。

NModbus4 (基于 NModbus 的维护版本)

这是C#中使用最广泛、最经典的Modbus库之一,它是原始NModbus项目的一个活跃维护分支,支持完整的Modbus协议栈。

核心特点

  • 支持 Modbus RTUModbus TCPModbus ASCII

  • 支持主站 (Master) 和从站 (Slave) 模式

  • 支持常用功能码

  • 轻量、稳定、文档丰富

    安装方式

    Install-Package NModbus4
    

    简单使用示例(Modbus TCP 读取保持寄存器)

    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.Net (模块化 Modbus 库)

    这是一个更现代、设计更灵活的Modbus库,它不仅支持标准Modbus,还扩展了多种工业通信协议,并且采用模块化设计,易于扩展和定制。

    核心特点

    • 支持 Modbus RTU/TCP/ASCII,还扩展支持 Modbus RTU over TCP

    • 内置数据类型转换

    • 支持异步操作(async/await),适配现代 C# 开发模式

    • 可扩展支持其他协议

    • 内置断线重连机制,稳定性更好

    安装方式

    Install-Package Modbus.Net
    

    简单使用示例(Modbus TCP 读写寄存器)

    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(01234, 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
    协议支持
    标准 Modbus 全支持
    标准 Modbus + 扩展协议
    异步支持
    需手动封装
    原生 async/await
    数据转换
    手动处理(如 BitConverter)
    自动映射(int、float、结构体等)
    断线重连
    需自行实现
    内置支持
    学习成本
    低(大量教程和示例)
    中(功能丰富,需理解架构)
    适用项目类型
    小型/传统项目、教学、原型
    中大型/生产级/现代架构项目

    选型建议

    如果你追求 简单、稳定、快速上手,或正在维护老项目 → 选择 NModbus4

    如果你需要 异步通信、自动数据解析、高可用性,或构建新一代工业软件 → 选择 Modbus.Net

     

版权声明: 本站资源均来自互联网或会员发布,如果侵犯了您的权益请与我们联系,我们将在24小时内删除!谢谢!联系QQ:76900276

转载请注明: C# 开发 Modbus 通信?这两大开源库你必须了解

嘿,我来帮您!