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

安装必要的库

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

Install-Package NModbus4
  • 1.

示例代码

以下是一个完整的 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}");
            }
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.

说明

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

注意事项

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

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