# modbus_assistant **Repository Path**: maybe_404/modbus_assistant ## Basic Information - **Project Name**: modbus_assistant - **Description**: modbus调试助手 - **Primary Language**: Rust - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-08 - **Last Updated**: 2026-02-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Modbus 示例程序集合 本项目包含基于 Rust 和 tokio_modbus 库实现的完整 Modbus 通信示例,包括 TCP 和 RTU 两种通信方式的服务器(从机)和客户端(主机)实现。 ## 功能特性 ### 支持的 Modbus 功能码 - **0x01** - 读取线圈 (Read Coils) - **0x02** - 读取离散输入 (Read Discrete Inputs) - **0x03** - 读取保持寄存器 (Read Holding Registers) - **0x04** - 读取输入寄存器 (Read Input Registers) - **0x05** - 写入单个线圈 (Write Single Coil) - **0x06** - 写入单个寄存器 (Write Single Register) - **0x0F** - 写入多个线圈 (Write Multiple Coils) - **0x10** - 写入多个寄存器 (Write Multiple Registers) ### 示例程序 | 程序名称 | 类型 | 通信方式 | 功能 | |---------|------|---------|------| | `tcp_server` | 服务器 (从机) | TCP | 运行在 127.0.0.1:502 端口 | | `tcp_client` | 客户端 (主机) | TCP | 连接到 127.0.0.1:502 端口 | | `rtu_server` | 服务器 (从机) | RTU | 运行在指定串口 | | `rtu_client` | 客户端 (主机) | RTU | 连接到指定串口 | ## 快速开始 ### 环境要求 - Rust 1.60+(推荐使用最新稳定版) - tokio_modbus 0.13+ - tokio 1.0+ ### 安装依赖 ```bash cargo build ``` ### 运行示例 1. **显示可用的示例程序** ```bash cargo run ``` 2. **运行 TCP 服务器** ```bash cargo run --bin tcp_server ``` 3. **运行 TCP 客户端** ```bash cargo run --bin tcp_client ``` 4. **运行 RTU 服务器** ```bash cargo run --bin rtu_server ``` > 注意:需要先修改 `src/rtu_server.rs` 中的串口名称为实际使用的串口 5. **运行 RTU 客户端** ```bash cargo run --bin rtu_client ``` > 注意:需要先修改 `src/rtu_client.rs` 中的串口名称为实际使用的串口 ## 项目结构 ``` modbus_tool/ ├── src/ │ ├── main.rs # 主入口文件,显示可用示例 │ ├── tcp_server.rs # TCP 服务器(从机)实现 │ ├── tcp_client.rs # TCP 客户端(主机)实现 │ ├── rtu_server.rs # RTU 服务器(从机)实现 │ └── rtu_client.rs # RTU 客户端(主机)实现 ├── Cargo.toml # 项目配置和依赖管理 ├── Cargo.lock # 依赖版本锁定文件 └── README.md # 项目说明文档 ``` ## 配置说明 ### TCP 示例 - **服务器地址**:127.0.0.1:502 - **客户端连接**:连接到 127.0.0.1:502 ### RTU 示例 - **默认串口**:COM1(Windows)或 /dev/ttyUSB0(Linux) - **波特率**:9600 - **数据位**:8 - **停止位**:1 - **校验位**:无 - **从机地址**:1 ## 数据存储 服务器(从机)实现包含以下数据存储: - **线圈**:100 个,初始值为 false - **离散输入**:100 个,初始值为 true - **保持寄存器**:100 个,初始值为 0 - **输入寄存器**:100 个,初始值为 42 ## 错误处理 所有示例都包含基本的错误处理: - 当请求地址超出范围时,返回 `IllegalDataAddress` 异常 - 当请求未实现的功能时,返回 `IllegalFunction` 异常 ## 技术实现 - **异步运行时**:tokio - **Modbus 库**:tokio_modbus - **串口库**:tokio-serial - **并发处理**:Arc> 实现线程安全的数据访问 ## 开发与调试 ### 编译项目 ```bash cargo build ``` ### 运行测试 ```bash cargo test ``` ### 代码格式检查 ```bash cargo fmt ``` ### 代码质量检查 ```bash cargo clippy ``` ## 注意事项 1. **RTU 通信**:需要确保串口名称配置正确,并且串口设备可用 2. **端口占用**:TCP 服务器默认使用 502 端口,确保该端口未被其他程序占用 3. **权限问题**:在 Linux 系统上,可能需要 sudo 权限才能访问串口设备 4. **运行顺序**:测试时应先启动服务器(从机),再启动客户端(主机) ## 许可证 MIT License ## 参考资料 - [tokio_modbus 文档](https://docs.rs/tokio-modbus/latest/tokio_modbus/) - [Modbus 协议规范](https://modbus.org/docs/Modbus_Application_Protocol_V1_1b3.pdf)