欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > C#通过Modbus读取温度和湿度

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

2025/12/24 9:51:55 来源:https://blog.csdn.net/nndsb/article/details/140947499  浏览:    关键词: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 温湿度传感器的数据并在控制台中显示。如果你的传感器使用不同的协议或有其他特殊设置,可能需要根据传感器的文档进行相应的调整。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词