news 2026/5/1 5:52:42

C#使用EasyModbus进行通讯

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#使用EasyModbus进行通讯

C#使用EasyModbus进行通讯

EasyModbus是一个流行的.NET库,用于实现Modbus TCP、RTU和UDP协议通信。以下是使用EasyModbus库的基本指南:

安装EasyModbus

首先,你需要通过NuGet安装EasyModbus库:

  1. 在Visual Studio中,右键点击你的项目
  2. 选择"管理NuGet程序包"
  3. 搜索"EasyModbus"并安装

或者使用Package Manager Console:

Install-PackageEasyModbus

基本用法

1. Modbus TCP客户端

usingEasyModbus;// 创建Modbus客户端实例ModbusClientmodbusClient=newModbusClient("127.0.0.1",502);// IP地址和端口try{// 连接到Modbus服务器modbusClient.Connect();// 读取保持寄存器 (功能码03)int[]holdingRegisters=modbusClient.ReadHoldingRegisters(0,10);// 从地址0开始读取10个寄存器// 写入单个寄存器 (功能码06)modbusClient.WriteSingleRegister(0,1234);// 向地址0写入值1234// 写入多个寄存器 (功能码16)int[]valuesToWrite={100,200,300};modbusClient.WriteMultipleRegisters(10,valuesToWrite);// 从地址10开始写入// 读取线圈状态 (功能码01)bool[]coilStatus=modbusClient.ReadCoils(0,5);// 从地址0开始读取5个线圈// 写入单个线圈 (功能码05)modbusClient.WriteSingleCoil(0,true);// 向地址0写入true}catch(Exceptionex){Console.WriteLine($"发生错误:{ex.Message}");}finally{// 断开连接modbusClient.Disconnect();}

2. Modbus RTU客户端 (串口通信)

usingEasyModbus;// 创建Modbus RTU客户端ModbusClientmodbusClient=newModbusClient("COM1");// 串口号modbusClient.Baudrate=9600;// 波特率modbusClient.Parity=System.IO.Ports.Parity.None;// 校验位modbusClient.StopBits=System.IO.Ports.StopBits.One;// 停止位try{modbusClient.Connect();// 与TCP类似的操作int[]inputRegisters=modbusClient.ReadInputRegisters(0,5);// ...其他操作}catch(Exceptionex){Console.WriteLine($"发生错误:{ex.Message}");}finally{modbusClient.Disconnect();}

3. Modbus服务器

EasyModbus也支持创建Modbus服务器:

usingEasyModbus;// 创建Modbus TCP服务器ModbusServermodbusServer=newModbusServer();modbusServer.Port=502;// 设置端口// 设置寄存器值(服务器模拟)modbusServer.HoldingRegisters[0]=100;modbusServer.HoldingRegisters[1]=200;// 启动服务器modbusServer.Listen();Console.WriteLine("Modbus服务器已启动,按任意键停止...");Console.ReadKey();// 停止服务器modbusServer.StopListening();

高级功能

异步操作

// 异步读取保持寄存器int[]registers=awaitTask.Run(()=>modbusClient.ReadHoldingRegisters(0,10));

事件处理

modbusClient.DataReceived+=(sender,e)=>{Console.WriteLine($"接收到数据:{BitConverter.ToString(e.Data)}");};

超时设置

modbusClient.ConnectionTimeout=5000;// 5秒连接超时

注意事项

  1. 确保防火墙允许Modbus通信(默认端口502)
  2. 对于RTU模式,确保串口配置与设备匹配
  3. 处理异常情况,如连接失败、超时等
  4. 寄存器地址从0开始,但某些设备文档可能从1开始计数,需要注意偏移

完整示例

usingSystem;usingEasyModbus;classProgram{staticvoidMain(string[]args){ModbusClientmodbusClient=newModbusClient("192.168.1.100",502);try{Console.WriteLine("正在连接Modbus服务器...");modbusClient.Connect();// 读取保持寄存器Console.WriteLine("读取保持寄存器...");int[]registers=modbusClient.ReadHoldingRegisters(0,5);for(inti=0;i<registers.Length;i++){Console.WriteLine($"寄存器{i}:{registers[i]}");}// 写入寄存器Console.WriteLine("写入寄存器...");modbusClient.WriteSingleRegister(10,1234);// 验证写入intvalue=modbusClient.ReadHoldingRegisters(10,1)[0];Console.WriteLine($"寄存器10的新值:{value}");}catch(Exceptionex){Console.WriteLine($"错误:{ex.Message}");}finally{modbusClient.Disconnect();Console.WriteLine("连接已关闭");}}}

通过以上示例,你应该能够开始在C#项目中使用EasyModbus库进行Modbus通信了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 18:13:21

【独家深度】:智谱Open-AutoGLM未公开的技术细节首次曝光

第一章&#xff1a;智谱 Open-AutoGLM沉思在大模型与自动化机器学习交汇的前沿&#xff0c;智谱推出的 Open-AutoGLM 引发了业界对智能建模新范式的深度思考。该框架融合生成语言模型的语义理解能力与自动化机器学习的流程优化机制&#xff0c;试图打破传统 AutoML 在特征工程与…

作者头像 李华
网站建设 2026/5/1 2:26:36

视频融合平台EasyCVR智慧农田可视化视频监控解决方案

一、背景需求科技进步正推动着智慧农业成为现代农业的核心趋势。智慧农田作为智慧农业的关键组成部分&#xff0c;通过集成尖端视频监控技术和智能化管理工具&#xff0c;实现了农业生产的精细化和高效率管理。视频融合平台EasyCVR&#xff0c;作为一个功能全面的综合视频监控管…

作者头像 李华
网站建设 2026/5/1 6:12:12

43、Ruby编程:ObjectSpace、Proc和Process模块深度解析

Ruby编程:ObjectSpace、Proc和Process模块深度解析 1. ObjectSpace模块 ObjectSpace模块提供了与垃圾回收机制交互的功能,还允许使用迭代器遍历所有存活的对象,同时支持对象终结器。 1.1 代码示例 include ObjectSpace a, b, c = "A", "B", "…

作者头像 李华
网站建设 2026/5/1 6:18:29

44、Ruby编程:进程、范围、正则表达式、信号与字符串操作详解

Ruby编程:进程、范围、正则表达式、信号与字符串操作详解 1. Process::Sys模块 Process::Sys模块提供了对进程用户和组环境的系统调用级访问。许多调用是Process模块中调用的别名,以下是该模块的一些重要方法: | 方法 | 描述 | | — | — | | getegid | 返回此进程的有…

作者头像 李华
网站建设 2026/4/22 7:01:40

如何快速调整图片尺寸大小?图片大小修改指南

在日常使用中&#xff0c;我们经常需要根据不同的平台或用途调整图片的尺寸——比如制作证件照、适配手机壁纸、上传社交媒体&#xff0c;或是满足网站对图片宽高的限制。手动裁剪不仅费时&#xff0c;还容易失真。其实&#xff0c;只需几个简单步骤&#xff0c;就能精准、高效…

作者头像 李华
网站建设 2026/4/30 19:24:38

足球比赛AI分析神器:智能分析系统如何帮你快速读懂比赛

对许多球迷来说&#xff0c;足球的魅力在于未知与激情。但随着技战术日趋复杂&#xff0c;单靠肉眼和经验往往难以捕捉比赛的全貌——关键时刻的战术调整、球员的跑位意图、胜负背后的数据逻辑&#xff0c;常常隐藏在转播镜头之外。今天&#xff0c;我们评测的这款足球智能分析…

作者头像 李华