# Modbus TCP 数据采集系统 基于 Spring Boot 3.x + MyBatis-Plus + JDK 21 的 Modbus TCP 数据采集系统。 ## 技术栈 - **JDK**: 21 - **Spring Boot**: 3.2.0 - **MyBatis-Plus**: 3.5.5 - **数据库**: MySQL 8.0+ - **缓存**: Redis - **Modbus库**: j2mod 3.2.1 - **连接池**: Druid 1.2.20 ## 功能特性 1. **设备管理** - 支持多设备配置 - 设备激活/停用控制 - 设备信息CRUD操作 2. **数据采集** - Modbus TCP协议通信 - 线圈(Coils)读取 - 用于信号检测 - 保持寄存器(Holding Registers)读取 - 用于数据采集 - 自动批量读取优化 - 定时采集任务(默认50ms间隔) 3. **数据存储** - 采集数据持久化到MySQL - Redis缓存设备状态 - 支持历史数据查询 4. **API接口** - RESTful API设计 - 设备管理接口 - 采集数据查询接口 ## 项目结构 ``` modbus-collector/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/xujie/modbus/ │ │ │ ├── ModbusCollectorApplication.java # 启动类 │ │ │ ├── config/ # 配置类 │ │ │ ├── controller/ # 控制器 │ │ │ ├── entity/ # 实体类 │ │ │ ├── mapper/ # Mapper接口 │ │ │ ├── runner/ # 启动任务 │ │ │ ├── service/ # 服务层 │ │ │ └── util/ # 工具类 │ │ └── resources/ │ │ ├── application.yml # 配置文件 │ │ ├── application-dev.yml # 开发环境配置 │ │ └── db/ │ │ └── schema.sql # 数据库脚本 │ └── test/ ├── pom.xml # Maven配置 └── README.md # 项目说明 ``` ## 快速开始 ### 1. 环境要求 - JDK 21+ - Maven 3.6+ - MySQL 8.0+ - Redis 6.0+ ### 2. 数据库初始化 执行 `src/main/resources/db/schema.sql` 创建数据库和表结构。 ### 3. 配置文件 修改 `src/main/resources/application.yml` 和 `application-dev.yml` 中的数据库和Redis配置。 ### 4. 运行项目 ```bash # 使用Maven运行 mvn spring-boot:run # 或打包后运行 mvn clean package java -jar target/modbus-collector-1.0.0.jar ``` ### 5. 访问接口 - API基础路径: `http://localhost:8080/modbus` - Druid监控: `http://localhost:8080/modbus/druid/index.html` (admin/admin123) ## API接口说明 ### 设备管理 - `GET /device/list` - 查询所有设备 - `GET /device/active` - 查询激活的设备 - `GET /device/page?current=1&size=10` - 分页查询设备 - `GET /device/{id}` - 根据ID查询设备 - `POST /device` - 新增设备 - `PUT /device` - 更新设备 - `DELETE /device/{id}` - 删除设备 ### 采集数据 - `GET /collect/list?deviceIp=192.168.1.100` - 查询采集数据 - `GET /collect/page?current=1&size=10&deviceIp=192.168.1.100` - 分页查询采集数据 - `GET /collect/{id}` - 根据ID查询采集数据 ## 设备配置说明 在 `device_info` 表中配置设备信息: - `ip`: 设备IP地址 - `port`: Modbus端口(默认502) - `active`: 是否激活(Y/N) - `roll_signal_address1/2`: 卷A/B分切信号线圈地址 - `roll_address1/2`: 卷A/B寄存器起始地址 - `roll_qty1/2`: 卷A/B寄存器数量 - `total_qty_address`: 总数寄存器地址 - `multiple_rolls_address`: 不良数量寄存器起始地址 - `multiple_rolls_qty`: 不良数量寄存器数量 ## 采集逻辑 1. **信号采集** (`handleSignal`) - 读取线圈状态,检测换卷信号 - 当信号为1时,读取寄存器获取新卷号 - 保存换卷信号数据 2. **数据采集** (`handleData`) - 读取总数和不良数量寄存器 - 通过总数归零判断小卷分切 - 保存生产数据 ## 注意事项 1. Modbus地址从0开始,但设备配置中的地址通常从1开始,代码中已做减1处理 2. 寄存器读取采用分批方式,每批最多100个,提高读取效率 3. 采集间隔默认50ms,可在配置文件中修改 4. 确保设备网络连通性和Modbus服务正常 ## 开发说明 - 项目使用MyBatis-Plus,无需编写SQL即可实现基本CRUD - 使用Lombok简化代码,减少getter/setter - 使用FastJSON2处理JSON数据 - 日志使用SLF4J + Logback ## 许可证 MIT License