news 2026/6/19 23:25:07

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/6/18 12:43:53

Open-AutoGLM + Android = 未来智能终端?深度剖析5大融合场景与落地挑战

第一章&#xff1a;Open-AutoGLM在Android端的演进与战略意义Open-AutoGLM作为开源自动语言模型框架&#xff0c;近年来在移动端特别是Android平台展现出显著的技术演进与生态扩展能力。其轻量化推理引擎与模块化架构设计&#xff0c;使得大型语言模型能够在资源受限设备上高效…

作者头像 李华
网站建设 2026/6/13 11:42:38

智谱 GLM-4.7 抢先实测体验:Claude Code 的升级替代品!

这个页面&#xff0c;是 GLM-4.7 自己写的。 一次提示&#xff0c;没改过&#xff0c;直接出。 黑底荧光绿配色&#xff0c;3D 几何体在旋转&#xff0c;代码演示区有打字机动画&#xff0c;连鼠标光标都换成了霓虹绿的小圆点。 感谢智谱大大给了我新模型的内测资格。 抢先…

作者头像 李华
网站建设 2026/6/19 14:41:22

3步搞定复杂手机自动化:基于Open-AutoGLM的phoneagent快速上手教程

第一章&#xff1a;3步搞定复杂手机自动化&#xff1a;基于Open-AutoGLM的phoneagent快速上手教程在移动设备管理与测试领域&#xff0c;自动化操作已成为提升效率的核心手段。Open-AutoGLM 推出的 phoneagent 框架&#xff0c;结合大模型理解能力与设备控制接口&#xff0c;实…

作者头像 李华
网站建设 2026/6/12 13:32:31

35、Ruby编程:编译时、运行时与内置类的灵活运用

Ruby编程:编译时、运行时与内置类的灵活运用 1. Ruby的编译时与运行时特性 在Ruby中,“编译时”和“运行时”之间并没有显著的区别,它们本质上是相同的。这意味着你可以在运行过程中添加代码,动态重新定义方法,改变方法的作用域(例如从公共变为私有),甚至修改基本类型…

作者头像 李华
网站建设 2026/6/16 18:47:02

46、Ruby 核心类与标准库使用指南

Ruby 核心类与标准库使用指南 1. ThreadGroup 类 1.1 基本概念 ThreadGroup 类用于跟踪一组线程。一个线程在同一时间只能属于一个 ThreadGroup ,当将一个线程添加到一个组时,它会自动从当前组中移除。新创建的线程会属于创建它们的线程所在的组。 1.2 常量 Default …

作者头像 李华
网站建设 2026/6/12 15:43:13

47、Ruby 标准库实用功能解析

Ruby 标准库实用功能解析 1. Abbrev 库:生成唯一缩写集合 Abbrev 库的主要功能是为一组字符串生成唯一的缩写集合。它会返回一个哈希表,其中键是所有可能的缩写,值是完整的字符串。 1.1 使用方法 对于输入的字符串集合,如 “car” 和 “cone”,指向 “car” 的键为 “…

作者头像 李华