You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
# 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 packagejava -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
|