news 2026/5/28 3:58:20

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/5/28 3:58:02

phoneagent Open-AutoGLM性能优化秘籍(响应速度提升90%的底层逻辑)

第一章&#xff1a;phoneagent Open-AutoGLM性能优化的核心价值phoneagent 集成 Open-AutoGLM 框架后&#xff0c;在移动端智能任务处理中展现出卓越的推理效率与资源利用率。其核心价值在于通过动态计算图剪枝、量化感知训练和轻量级缓存机制&#xff0c;显著降低模型响应延迟…

作者头像 李华
网站建设 2026/5/23 12:20:18

Open-AutoGLM在Win11上的部署秘籍(仅限高级开发者知晓)

第一章&#xff1a;Open-AutoGLM部署前的高级准备 在将 Open-AutoGLM 投入生产环境之前&#xff0c;必须完成一系列高级准备工作&#xff0c;以确保系统稳定性、安全性与可扩展性。这些步骤涵盖硬件资源配置、依赖项管理、环境隔离以及安全策略设定。 硬件与系统要求评估 Open…

作者头像 李华
网站建设 2026/5/23 12:19:28

别再让 AI 自由发挥了!用 LangChain + Zod 强制它输出合法 JSON

用 LangChain Zod 构建类型安全的 AI 结构化输出 —— 从“一句话解释 Promise”开始大模型很聪明&#xff0c;但也很“自由”。 你让它解释 Promise&#xff0c;它可能回你一段优美的散文&#xff1b; 你想要一个干净的 JSON&#xff0c;它却在前后加上“好的&#xff01;”“…

作者头像 李华
网站建设 2026/5/23 11:19:24

24、云存储队列与表服务操作全解析

云存储队列与表服务操作全解析 在云存储的应用场景中,队列和表服务是非常重要的组成部分。下面将详细介绍队列消息的操作以及 Windows Azure 表服务的相关内容。 队列消息操作 消息入队 向队列中添加消息时,通过发送如下的 HTTP POST 请求: POST /testq1/messages?ti…

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

31、逐跳行为(PHB)及其实现示例

逐跳行为(PHB)及其实现示例 在网络通信中,为了实现不同类型流量的差异化服务,逐跳行为(Per-Hop Behavior,PHB)的概念应运而生。PHB 描述了差分服务(Diffserv)节点对特定差分服务行为聚合体的外部可观察转发行为。下面将详细介绍 PHB 的相关内容。 1. PHB 基础概念与…

作者头像 李华
网站建设 2026/5/23 12:20:02

互联网大厂求职:Java面试中的技术点和业务场景解析

互联网大厂求职&#xff1a;Java面试中的技术点和业务场景解析 场景描述&#xff1a; 在某互联网大厂的面试室内&#xff0c;面试官正襟危坐&#xff0c;而一旁坐着的程序员谢飞机则显得有些紧张。这是谢飞机的第N次面试&#xff0c;前几次的“辉煌战绩”让他今天不敢掉以轻心。…

作者头像 李华