当前位置: 首页 > news >正文

C#通过Modbus读取温度和湿度

使用 C# 通过 RS-485 接口读取温湿度数据并在电脑上显示,需要使用串口通信。假设你的温湿度传感器使用 Modbus RTU 协议,这里提供一个示例代码,使用 System.IO.Ports 命名空间进行串口通信,并使用 Modbus 协议库 NModbus 进行通信。

安装必要的库

你需要通过 NuGet 包管理器安装 NModbus 库。你可以在 Visual Studio 的包管理器控制台中运行以下命令:

Install-Package NModbus4

示例代码

以下是一个完整的 C# 控制台应用程序示例代码:

using System;
using System.IO.Ports;
using NModbus;namespace ReadTemperatureHumidity
{class Program{static void Main(string[] args){string portName = "COM3";  // 根据实际情况修改int baudRate = 9600;       // 根据实际情况修改Parity parity = Parity.None;int dataBits = 8;StopBits stopBits = StopBits.One;byte slaveAddress = 1;     // Modbus 从设备地址try{using (SerialPort port = new SerialPort(portName, baudRate, parity, dataBits, stopBits)){port.Open();var factory = new ModbusFactory();var master = factory.CreateRtuMaster(port);master.Transport.Retries = 0; // 不重试master.Transport.ReadTimeout = 1000; // 读超时while (true){try{// 读取温度和湿度ushort[] registers = master.ReadHoldingRegisters(slaveAddress, 0, 2);// 假设寄存器0保存温度,寄存器1保存湿度float temperature = registers[0] / 10.0f; // 根据实际情况调整float humidity = registers[1] / 10.0f;    // 根据实际情况调整Console.WriteLine($"温度: {temperature} °C, 湿度: {humidity} %");}catch (Exception ex){Console.WriteLine($"读取失败: {ex.Message}");}System.Threading.Thread.Sleep(2000); // 每隔2秒读取一次}}}catch (Exception ex){Console.WriteLine($"串口打开失败: {ex.Message}");}}}
}

说明

  • 串口参数:确保 portNamebaudRateparitydataBitsstopBits 等参数与实际设备设置匹配。
  • 寄存器地址:根据你的传感器文档,修改 master.ReadHoldingRegisters 中的寄存器地址。假设寄存器 0 保存温度,寄存器 1 保存湿度。
  • 数据处理:温度和湿度的转换(如 / 10.0f)根据传感器的实际数据格式进行调整。

注意事项

  1. 串口权限:确保你的程序有权限访问串口。
  2. 错误处理:包括了简单的错误处理来应对串口通信或读取数据时可能出现的问题。
  3. 适配不同设备:如果你的设备使用不同的协议或数据格式,可能需要根据设备文档进行相应调整。

通过这个示例代码,你可以读取 RS-485 温湿度传感器的数据并在控制台中显示。如果你的传感器使用不同的协议或有其他特殊设置,可能需要根据传感器的文档进行相应的调整。

http://www.lryc.cn/news/417462.html

相关文章:

  • 海量数据处理商用短链接生成器平台 - 9
  • 从困境到突破,EasyMR 集群迁移助力大数据底座信创国产化
  • 【Mysql】第十二章 视图特性(概念+使用)
  • 【颠覆数据处理的利器】全面解读Apache Flink实时大数据处理的引擎-上篇
  • 【C++】C++11(可变参数模板、lambda表达式、包装器)
  • 矩阵获客时代,云微客让你一个人成就一支队伍
  • 浅谈基础的图算法——Tarjan求强联通分量算法(c++)
  • 【Godot4自学手册】第四十四节用着色器(shader)实现溶解效果
  • 【画流程图工具】
  • Revit二次开发选择过滤器,SelectionFilter
  • 【Linux】进程概念—环境变量
  • 第十二章 Spring MVC 框架扩展和SSM框架整合(2023版本IDEA)
  • js中的全局函数有这些
  • Android SurfaceFlinger——重绘闪烁处理(四十六)
  • 罗马数字转整数 C++
  • Day20_2--介绍同步加载和异步加载
  • sftp做成一个池子
  • 全网最全-Netty从入门到精通
  • C#知识|文件与目录操作:对象的创建、保存、读取
  • 自定义 SwiftUI 中符号图像的外观
  • 循环神经网络和自然语言处理一
  • CSS技巧专栏:一日一例 20-纯CSS实现点击会凹陷的按钮
  • 20240807 每日AI必读资讯
  • 海外社媒账号如何让防关联?账号隔离的5大要点
  • 下一代 AI 搜索引擎 MindSearch:多智能体 + 系统2,模拟人类认知过程的 AI 搜索引擎
  • 一键生成专业PPT:2024年AI技术在PPT软件中的应用
  • Godot学习笔记8——PONG游戏制作
  • 软件RAID配置实战(2个案例场景)
  • # 基于MongoDB实现商品管理系统(2)
  • 国标GB28181视频平台LntonCVS视频融合共享平台视频汇聚应用方案