用Java开发嵌入式工业数据报表系统:自动生成生产数据统计看板
在工业现场,管理人员需要实时了解产线产量、设备OEE、不良率等关键指标。传统做法是人工抄表或用Excel汇总,效率低且滞后。直接在嵌入式边缘网关(如RK3568、i.MX8M)上运行Java报表系统,可以就近采集PLC和传感器数据,自动生成统计看板,并通过内网Web页面展示。本文展示一个轻量级方案的完整实现。
整体架构
数据流:PLC/传感器 → SQLite数据库 → 定时统计任务 → JSON API → 前端ECharts看板
全部运行在同一台ARM Linux设备上,无需额外服务器。
数据采集与存储
使用H2嵌入式数据库(兼容SQL,体积仅2MB),通过Modbus TCP定时采集产量计数器:
@Component
public class DataCollector {
@Scheduled(fixedRate = 60000) // 每分钟采集一次
public void collect() {
int count = readPlcCounter(); // 通过Modbus读取
jdbcTemplate.update("INSERT INTO production(ts, count) VALUES(NOW(), ?)", count);
}
}
统计报表生成
使用Spring Boot的@Scheduled每日凌晨自动生成昨日生产报表,结果存入汇总表:
@Service
public class ReportGenerator {
@Scheduled(cron = "0 5 0 * * ?") // 每天0点5分执行
public void generateDailyReport() {
// 计算昨日总产量、良品率、设备运行时长
String sql = "SELECT DATE(ts) as day, SUM(count) as total FROM production WHERE ts >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) GROUP BY day";
Map<String, Object> report = jdbcTemplate.queryForMap(sql);
// 存入report表
jdbcTemplate.update("INSERT INTO daily_report(date, total, good_rate) VALUES(?, ?, ?)",
report.get("day"), report.get("total"), calculateGoodRate());
}
}
REST API提供数据
通过Spring Boot Controller暴露统计接口:
@RestController
@RequestMapping("/api/report")
public class ReportController {
@GetMapping("/daily")
public List<DailyReport> getDailyReports(@RequestParam(defaultValue = "7") int days) {
return jdbcTemplate.query(
"SELECT * FROM daily_report ORDER BY date DESC LIMIT ?",
new BeanPropertyRowMapper<>(DailyReport.class), days);
}
}
前端看板:ECharts实时展示
在嵌入式设备的/opt/web目录下放置静态HTML文件,使用ECharts绘制柱状图和折线图:
<!DOCTYPE html>
<html>
<head>
<script src="echarts.min.js"></script>
</head>
<body>
<div id="chart" style="width: 800px; height: 400px;"></div>
<script>
fetch('/api/report/daily?days=7')
.then(r => r.json())
.then(data => {
var chart = echarts.init(document.getElementById('chart'));
chart.setOption({
xAxis: { data: data.map(d => d.date) },
yAxis: {},
series: [{
type: 'bar',
data: data.map(d => d.total)
}]
});
});
</script>
</body>
</html>
Spring Boot自动托管静态资源,将HTML放在src/main/resources/static/目录即可。
自动化与告警
除了定时报表,还可以设置阈值告警:当不良率超过5%时,自动发送钉钉消息或邮件。使用Spring Mail或钉钉机器人Webhook:
if (badRate > 5.0) {
restTemplate.postForEntity("https://oapi.dingtalk.com/robot/send?access_token=xxx",
Map.of("msgtype", "text", "text", Map.of("content", "⚠️ 不良率超标: " + badRate + "%")),
String.class);
}
部署与运行
编译为Fat JAR,通过systemd管理:
java -jar report-system.jar --server.port=8080
在局域网内访问http://192.168.1.100:8080即可看到看板。整套系统内存占用约80MB,CPU占用在5%以下。
写在最后
用Java在嵌入式设备上构建报表系统,本质上是把边缘网关变成一个微型数据中心。Spring Boot的定时任务、嵌入式数据库和REST API,加上ECharts的前端渲染,构成了一个完整的闭环。对于中小型工厂,这套方案无需购置昂贵的服务器和商业组态软件,一台几百元的ARM开发板就能承载。当产线主管打开手机浏览器就能看到昨日的产量趋势时,嵌入式Java的价值就不再只是“能跑”,而是“好用”。
关键词:嵌入式Java,工业报表,数据看板





