用C#读取Modbus温度传感器

传感器地址表

寄存器地址 类型 功能描述 数据格式 示例值
0x0000 (0)
Input Register (只读)
温度值,高精度(浮点型,双寄存器)
浮点数
25.2°C(IEEE格式)
0x0001 (1)
Input Register (只读)
湿度值(如果是温湿一体设备)
浮点数
60.1%
0x0100 (256)
Holding Register (可读写)
单位配置 (0=°C, 1=°F)
16 位整数
0(摄氏度)
0x0200 (512)
Coil (线圈,可读写)
报警启用标志
1 位布尔值
1(启用报警提示)
0x0300 (768)
Discrete Input (只读)
故障状态指示
1 位布尔值
0(无故障)

安装相关依赖

在C#项目中,需要一个库来实现Modbus通讯功能。推荐使用NModbus,它是一个流行且易用的开源库。

步骤:

  • 1.打开Visual Studio。
  • 2.使用NuGet Package Manager安装NModbus:
Install-Package NModbus

001

设置Modbus通讯

Modbus常见的两种通讯方式是串口(Modbus RTU)TCP(Modbus TCP/IP)。下面以Modbus TCP为例。

代码示例:

using System;
using System.Net.Sockets;
using NModbus;

classProgram
{
    static void Main(string[] args)
    {
        string ipAddress = "192.168.1.100"; // 替换为传感器IP
        int port = 502; // 默认的Modbus TCP端口

        try
        {
            // 建立TCP连接
            using (var tcpClient = new TcpClient(ipAddress, port))
            {
                var factory = new ModbusFactory();
                var master = factory.CreateMaster(tcpClient);

                // 读取温度值(寄存器0地址)
                ushort startAddress = 0; // 温度地址
                ushort[] registers = master.ReadInputRegisters(1, startAddress, 2);

                // 将寄存器数据转换为浮点型
                float temperature = ConvertToFloat(registers[0], registers[1]);
                Console.WriteLine($"当前温度: {temperature} °C");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"错误: {ex.Message}");
        }
    }

    // 双寄存器转浮点数
    static float ConvertToFloat(ushort high, ushort low)
    {
        byte[] data = newbyte[4];
        Buffer.BlockCopy(BitConverter.GetBytes(low), 0, data, 0, 2);
        Buffer.BlockCopy(BitConverter.GetBytes(high), 0, data, 2, 2);
        return BitConverter.ToSingle(data, 0);
    }
}

解析Modbus地址与数据

  • 1.Modbus寄存器:
    温度传感器通常储存在输入寄存器(Input Register)或保持寄存器(Holding Register)。实际使用前,需要查阅设备文档确认其寄存器地址。
  • 2.数据转换:
    常见的温度数据格式包括整型或浮点型,需要在获取后根据传感器需求做相应处理。

调试注意事项

  • 1.确保网络或串口连接正常,并确认IP地址和端口匹配实际设备。
  • 2.校对寄存器地址,如果数据异常需检查设备手册。
  • 3.检查协议类型,确定使用Modbus TCP还是RTU协议。

常见错误处理:

  • 连接超时: 确认防火墙是否拦截。
  • 数据不正确: 检查是否需要字节顺序(Byte Order)调整。

 

 

 
Copyright © 2008-2021 lanxinbase.com Rights Reserved. | 粤ICP备14086738号-3 |