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 温湿度传感器的数据并在控制台中显示。如果你的传感器使用不同的协议或有其他特殊设置,可能需要根据传感器的文档进行相应的调整。

  • 14
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用C#读取三菱PLC的步骤如下: 1. 了解MODBUS协议 MODBUS是一种通信协议,用于在工业自动化和控制系统中进行通信。它可以通过串行或以太网连接进行通信,并且可以在不同类型的设备之间传输数据。要使用MODBUS协议与三菱PLC通信,需要了解PLC的寄存器映射和MODBUS协议的数据结构。 2. 安装MODBUS库 在C#中使用MODBUS协议需要使用第三方库。有许多开源库可供选择,例如NModbus、EasyModbus等。可以使用NuGet包管理器来安装这些库。 3. 设置MODBUS连接 在C#中使用MODBUS库时,需要设置与PLC的连接。这包括PLC的IP地址、端口号、设备地址等。可以使用库中提供的类来设置连接。 4. 读取PLC寄存器 一旦连接设置完成,就可以读取PLC的寄存器了。可以使用库中提供的函数来读取寄存器,例如ReadInputRegisters、ReadHoldingRegisters等。读取的数据可以存储在一个数组中,然后可以在程序中使用。 下面是一个使用NModbus读取三菱PLC的示例代码: ```csharp using System; using Modbus.Data; using Modbus.Device; using System.Net.Sockets; namespace ModbusTest { class Program { static void Main(string[] args) { // 设置连接 TcpClient client = new TcpClient("192.168.1.1", 502); ModbusIpMaster master = ModbusIpMaster.CreateIp(client); // 读取寄存器 ushort startAddress = 0; ushort numRegisters = 10; ushort[] registers = master.ReadHoldingRegisters(1, startAddress, numRegisters); // 显示读取的数据 for (int i = 0; i < numRegisters; i++) { Console.WriteLine("Register {0}: {1}", startAddress + i, registers[i]); } // 关闭连接 client.Close(); } } } ``` 在这个例子中,我们使用了NModbus库来读取三菱PLC的保持寄存器。我们设置了PLC的IP地址为192.168.1.1,端口号为502。然后,我们读取了从第0个保持寄存器开始的10个寄存器,并将读取的数据存储在一个数组中。最后,我们遍历数组并将每个寄存器的值打印到控制台上。 请注意,此示例仅适用于保持寄存器。如果要读取其他类型的寄存器(例如输入寄存器),则需要使用不同的函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

战族狼魂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值