1. 工业设备数据采集方案概述
在工业自动化领域,PLC(可编程逻辑控制器)作为核心控制设备,其运行数据的实时采集与共享对生产监控、设备维护和数据分析至关重要。传统的数据采集方式往往面临几个痛点:单线程串行采集效率低、连接管理不规范导致资源泄漏、数据共享依赖数据库增加系统负担。针对这些问题,我们设计了一套基于SpringBoot+modbus4j的多PLC设备数据采集方案。
这个方案的核心价值在于:
- 采用连接池管理Modbus TCP连接,避免频繁建立/断开连接的开销
- 利用并行流(parallelStream)实现多设备并发读取,提升采集效率
- 将采集数据缓存至Redis,5秒过期策略平衡了数据实时性和系统负载
- 完善的异常处理机制,自动重建异常连接保证系统健壮性
整套方案代码约300行,主要涉及五个关键模块:
- 设备配置管理(YAML配置+POJO映射)
- Modbus通信工具类(连接管理+寄存器读取)
- 定时任务调度(多设备并行采集)
- Redis缓存集成(数据序列化+过期策略)
- 连接池管理(自动回收+健康检查)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与项目配置
2.1 开发环境要求
- JDK 1.8+
- SpringBoot 2.7.x
- Redis 5.0+
- 测试用PLC设备或Modbus Slave模拟器(如ModbusPal)
2.2 Maven依赖配置
核心依赖包括modbus4j通信库和SpringBoot Starter:
xml复制<!-- Modbus通信核心库 -->
<dependency>
<groupId>com.infiniteautomation</groupId>
<artifactId>modbus4j</artifactId>
<version>3.0.3</version>
</dependency>
<!-- SpringBoot基础套件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Redis集成 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 其他工具类 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.23</version>
</dependency>
注意:modbus4j 3.0.3版本对TCP连接做了优化,相比2.x版本减少了30%的内存占用。实际测试中,单连接常驻内存从350KB降至240KB。
2.3 PLC设备配置
在application.yml中定义设备参数,采用列表形式支持多设备:
yaml复制modbus:
task:
rate: "2000" # 采集周期(ms)
timeout: 3000 # 读取超时(ms)
devices:
- ip: 192.168.1.10
port: 502
slaveId: 1
name: "压铸机#1"
registers:
runS
