news 2026/4/16 10:50:15

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/16 3:17:39

揭秘Open-AutoGLM本地部署全流程:5步实现模型自动化推理

第一章&#xff1a;揭秘Open-AutoGLM本地部署全流程&#xff1a;5步实现模型自动化推理在本地环境中部署 Open-AutoGLM 模型并实现自动化推理&#xff0c;已成为企业与开发者提升 AI 应用响应效率的关键路径。通过合理配置硬件资源与优化服务调用链路&#xff0c;可在无需云依赖…

作者头像 李华
网站建设 2026/4/12 20:47:08

为什么顶尖团队都在抢用phoneagent Open-AutoGLM组合?真相终于揭晓

第一章&#xff1a;顶尖团队为何青睐phoneagent Open-AutoGLM组合在人工智能与自动化深度融合的今天&#xff0c;顶尖技术团队正将目光聚焦于 **phoneagent** 与 **Open-AutoGLM** 的协同架构。这一组合不仅实现了移动端智能体的自主决策闭环&#xff0c;更通过轻量化模型部署与…

作者头像 李华
网站建设 2026/4/12 7:05:08

计算机毕业设计springboot露营装备租赁系统 基于SpringBoot的户外用品共享租赁平台 面向露营爱好者的装备在线租借系统

计算机毕业设计springboot露营装备租赁系统rtx5p5od &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。露营经济持续升温&#xff0c;但高端帐篷、睡袋、炉具等动辄上千元的价格把许…

作者头像 李华
网站建设 2026/4/16 3:28:37

手残党也能成功!Win11一键部署Open-AutoGLM的4种高效方法

第一章&#xff1a;Win11部署Open-AutoGLM的核心挑战与前景在Windows 11系统上部署Open-AutoGLM模型面临多重技术挑战&#xff0c;同时也展现出广阔的应用前景。该模型作为开源自动化生成语言模型&#xff0c;对本地计算资源、依赖环境及系统兼容性提出了较高要求。系统兼容性与…

作者头像 李华
网站建设 2026/4/12 22:31:34

如何让多模态大模型更聪明?推理引导嵌入(RGE)详解与实战!

简介 文章提出推理引导嵌入(RGE)新方法&#xff0c;将多模态大模型的生成式推理能力融入嵌入提取过程。方法分为两步&#xff1a;先生成结构化推理分析&#xff0c;再提取特征表示。通过联合训练语言建模损失和对比损失&#xff0c;避免信息泄漏问题。实验表明&#xff0c;RGE在…

作者头像 李华
网站建设 2026/3/31 5:32:46

42、Ruby 核心类与方法详解

Ruby 核心类与方法详解 1. NilClass 类 NilClass 是单例对象 nil 的类,下面是该类的一些实例方法: - & : nil & obj 总是返回 false 。需要注意的是, obj 作为方法调用的参数,总是会被求值,这里不存在短路求值。示例代码如下: nil && puts…

作者头像 李华