# Modbus **Repository Path**: caoyiliang/Modbus ## Basic Information - **Project Name**: Modbus - **Description**: Modbus协议 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-14 - **Last Updated**: 2026-05-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Modbus 协议库 一个简洁易用的 Modbus RTU/TCP 通信库,支持泛型和 Attribute 驱动的数据映射。 ## 快速开始 ### 1. 定义数据模型 ```csharp public class SensorData { [CHProtocol(1)] // 寄存器地址 1 public float Temperature { get; set; } [CHProtocol(3)] // 寄存器地址 3 public ushort Humidity { get; set; } [CHProtocol(5)] // 寄存器地址 5 public float Pressure { get; set; } [CHProtocol(7, count: 4)] // string 需要声明寄存器数量(4 寄存器 = 8 字节) public string DeviceName { get; set; } = string.Empty; } ``` ### 2. 读取数据 ```csharp // 创建 Modbus 主站(默认 RTU 模式) IModBusMaster modBus = new ModBusMaster(new SerialPort("COM2")); await modBus.OpenAsync(); byte address = 0x01; // 直接读取并映射到类型 var data = await modBus.GetAsync(address); Console.WriteLine($"温度: {data.Temperature}, 湿度: {data.Humidity}, 压力: {data.Pressure}, 名称: {data.DeviceName}"); ``` ### 3. 写入数据 ```csharp var newData = new SensorData { Temperature = 25.5f, Humidity = 60, Pressure = 1013.25f, DeviceName = "PUMP-A" }; await modBus.SetAsync(0x01, newData); ``` ## 高级用法 ### 手动构建 BlockList ```csharp var blockList = BlockList.From(); var channels = await modBus.GetAsync(0x01, blockList); ``` ### 兼容字符串地址 ```csharp // 仍支持字符串地址格式:"1"、"01"、"0x01" var data = await modBus.GetAsync("0x01"); ``` ## 支持的数据类型 | C# 类型 | Modbus 寄存器数 | |---------|----------------| | `float` | 2 | | `double` | 4 | | `ushort` | 1 | | `uint` | 2 | | `short` | 1 | | `int` | 2 | | `string` | N(必须通过 `CHProtocol(..., count: N)` 指定) | ## 配置选项 ```csharp // TCP 模式 var modbusTcp = new ModBusMaster(new TcpClient("192.168.1.100", 502), ModbusType.TCP); // 字节序配置 modBus.IsHighByteBefore_Req = false; // 请求低字节在前 modBus.IsHighByteBefore_Rsp = false; // 响应低字节在前 ``` ## 安装 ```bash dotnet add package CSoft.Protocol.Modbus ```