# ModbusLink **Repository Path**: ChangGengCN/modbus-link ## Basic Information - **Project Name**: ModbusLink - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-12 - **Last Updated**: 2026-01-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 该项目旨在为通过串口通信的Modbus协议提供一个功能完整的实现,支持RTU模式。它包含了核心功能定义和串口通信的具体实现,可以用于工业自动化等场景中设备间的数据交换。 ## 特性 - 提供了Modbus请求与响应的基础类。 - 支持常见的Modbus功能码,如读取线圈、输入寄存器、保持寄存器以及写入操作。 - 实现了基于串口的Modbus RTU主站通信。 - 新增基于串口的Modbus RTU从机通信(监听并响应主站请求)。 - 包含CRC16校验以确保数据传输的准确性。 - 使用异步编程模型提高通信效率。 ## 安装 ### 从 NuGet 安装 - 使用 .NET CLI: - `dotnet add package ModbusLink.SerialPort` - 使用 Visual Studio 包管理器: - `Install-Package ModbusLink.SerialPort` - 使用 `PackageReference`: - `` 说明:`ModbusLink.SerialPort` 包包含串口 RTU 主/从实现,并依赖核心库;版本号请根据发布版本选择。 ### 从源码安装 确保已安装 .NET SDK;将解决方案添加为引用或直接编译当前仓库。 ## 使用示例 以下是如何使用这个库来创建一个Modbus RTU主站并进行连接的基本示例: ```csharp using System; using System.Threading.Tasks; using ModbusLink.SerialPort; namespace ModbusLinkExample { class Program { static async Task Main(string[] args) { // 创建串口配置 var config = new SerialPortConfig { PortName = "COM1", BaudRate = 9600 }; // 创建Modbus RTU主站实例 using (var master = new ModbusRtuMaster(config)) { // 打开连接 var connectResult = await master.OpenConnect(); if (!connectResult.IsSuccess) { Console.WriteLine($"连接失败: {connectResult.ResponseErrorInfo}"); return; } // 进行Modbus读写操作... // 关闭连接 await master.CloseConnect(); } } } } ``` ### 从机快速开始 以下是创建一个Modbus RTU从机并接入基础数据存储的示例: ```csharp using System.Threading.Tasks; using ModbusLink.Core; using ModbusLink.SerialPort; class Demo { static async Task Main() { var store = new BasicSlaveDataStore(coilCount: 1024, discreteInputCount: 1024, holdingRegisterCount: 1024, inputRegisterCount: 1024); var slave = new ModbusRtuSlave(0x01, new SerialPortConfig { PortName = "COM2", BaudRate = 9600 }, store); var open = await slave.OpenConnect(); if (!open.IsSuccess) return; // 从机开始在 COM2 监听,主站可在另一串口发送请求 await Task.Delay(10000); await slave.CloseConnect(); } } ``` ### 数据存储接口 - `IModbusSlaveDataStore` 抽象了从机的数据访问,默认实现 `BasicSlaveDataStore` 采用线程安全的内存数组: - 读:`ReadCoils`、`ReadDiscreteInputs`、`ReadHoldingRegisters`、`ReadInputRegisters` - 写:`WriteSingleCoil`、`WriteMultipleCoils`、`WriteSingleRegister`、`WriteMultipleRegisters` - 越界与无效参数将抛出异常,与从机异常码映射一致。 ### 异常码与错误处理 - 从机异常响应(功能码最高位置1): - `0x01` Illegal Function:不支持的功能码 - `0x02` Illegal Data Address:地址越界 - `0x03` Illegal Data Value:数据无效 - `0x04` Slave Device Failure:运行错误 - 广播地址 `0x00` 请求只执行不回送响应。 ### 联调与测试 - 推荐使用虚拟串口对进行主从联调:主站绑定一端,从机绑定另一端,按需设置 `SerialPortConfig`。 - 主站实现位于 `ModbusLink.SerialPort/ModbusRtuMaster.cs`,从机实现位于 `ModbusLink.SerialPort/ModbusRtuSlave.cs`。 更多详细说明请参阅 `docs/ModbusSlave.md`。 ## 贡献 欢迎贡献代码和建议。请提交Pull Request或Issue到本项目的Gitee页面。 ## 许可证 本项目遵循MIT许可证。详情请查看项目中的LICENSE文件。