『7x24小时有问必答』

前言

工业自动化领域,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}");

                  }

            }

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

选型建议

如果你追求  简单、稳定、快速上手,或正在维护老项目 → 选择  NModbus4
如果你需要  异步通信、自动数据解析、高可用性,或构建新一代工业软件 → 选择  Modbus.Net

关键词

最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠]  社区,与其他热爱技术的同行一起交流心得,共同成长!
作者:小码编匠
出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!

END

方便大家交流、资源共享和共同成长
纯技术交流群,需要加入的小伙伴请扫码,并备注加群

推荐阅读

觉得有收获?不妨分享让更多人受益
关注「DotNet技术匠」,共同提升技术实力

收藏
点赞
分享
在看

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码