From 41157d116c3a3cd11c2c258e44e0790f4fb5737d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LAPTOP-S9HJSOEB=5C=E6=98=8A=E5=A4=A9?= Date: Tue, 16 Jun 2026 14:09:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=BA=E7=AE=97=E6=B3=95?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0plc=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/s7/S7MultiPlcService.java | 24 +++++++++++++++---- src/main/resources/logback-spring.xml | 22 ++++++++--------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/example/lxcameraapi/service/s7/S7MultiPlcService.java b/src/main/java/com/example/lxcameraapi/service/s7/S7MultiPlcService.java index 1351db1..e466dcb 100644 --- a/src/main/java/com/example/lxcameraapi/service/s7/S7MultiPlcService.java +++ b/src/main/java/com/example/lxcameraapi/service/s7/S7MultiPlcService.java @@ -101,7 +101,7 @@ public class S7MultiPlcService { private final Map readDataCache = new ConcurrentHashMap<>(); // 上一次读取的托盘码缓存: plcNumber -> 上次托盘码 - private final Map lastPalletCache = new ConcurrentHashMap<>(); + private final Map lastPalletCache = new ConcurrentHashMap<>(); // 连接池大小 private final int POOL_SIZE = 3; @@ -392,17 +392,24 @@ public class S7MultiPlcService { plcNumber, data.getPalletNo(), data.getBatchNo(), data.getDate(), data.getSnapFlag()); // 检查托盘号是否需要处理 - String lastPallet = lastPalletCache.get(plcNumber); + PlcReadData lastPlcData = lastPalletCache.get(plcNumber); boolean needProcess = false; if (data.getSnapFlag() == 0){ // 标记拍照修改 writePhotoResult(plcNumber, (byte) 0); }else { - if (data.getSnapFlag() == 1 && (lastPallet == null || !lastPallet.equals(data.getPalletNo()))) { + if (data.getSnapFlag() == 1 && (lastPlcData == null || !lastPlcData.getPalletNo().equals(data.getPalletNo()))) { + // 托盘号变化或首次启动 needProcess = true; } + if (lastPlcData != null && data.getSnapFlag() == 1 && (lastPlcData.getPalletNo().equals(data.getPalletNo()))&& lastPlcData.isValid()) { + + // 标记拍照完成 + log.info("PLC {} 拍照完成 再次标注", plcNumber); + writePhotoResult(plcNumber, (byte) 1); + } } // if (lastPallet == null) { @@ -419,13 +426,17 @@ public class S7MultiPlcService { // } if (needProcess) { - lastPalletCache.put(plcNumber, data.getPalletNo()); + lastPalletCache.put(plcNumber, data); // 触发灯 if (config.getLightChannel() != null) { lightService.pulse(config.getLightChannel(), lightConfig.getDuration(), lightConfig.getRes(), lightConfig.getIp(), lightConfig.getPort()); } - log.info("PLC {} 托盘号变化: {} -> {}", plcNumber, lastPallet, data.getPalletNo()); + if (lastPlcData != null) { + log.info("PLC {} 托盘号变化: {} -> {}", plcNumber, lastPlcData.getPalletNo(), data.getPalletNo()); + }else { + log.info("PLC {} 首次启动,托盘号: {}", plcNumber, data.getPalletNo()); + } sleep(500); @@ -457,6 +468,8 @@ public class S7MultiPlcService { cameraUrl.setPlc(plcNumber); cameraUrlService.saveOrUpdate(cameraUrl); + readDataCache.get(plcNumber).setValid(true); + // 标记拍照完成 writePhotoResult(plcNumber, (byte) 1); } @@ -833,6 +846,7 @@ public class S7MultiPlcService { private byte snapFlag; // 允许拍照标志 private byte photoResult; // 拍照结果 private long updateTime; // 更新时间 + private boolean isValid =false; // 是否有效 @Override public String toString() { diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index 96ba6c6..398a37b 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -13,13 +13,12 @@ - + ${log.path}/sys-info.log - ${log.path}/sys-info.%d{yyyy-MM-dd}.%i.log - 100MB + 10MB 30 3GB @@ -34,13 +33,12 @@ - + ${log.path}/sys-error.log - ${log.path}/sys-error.%d{yyyy-MM-dd}.%i.log - 100MB + 10MB 30 3GB @@ -55,12 +53,12 @@ - + ${log.path}/camera.log ${log.path}/camera.%d{yyyy-MM-dd}.%i.log - 100MB + 10MB 30 1GB @@ -70,12 +68,12 @@ - + ${log.path}/qrcode.log ${log.path}/qrcode.%d{yyyy-MM-dd}.%i.log - 50MB + 10MB 15 500MB @@ -85,12 +83,12 @@ - + ${log.path}/schedule.log ${log.path}/schedule.%d{yyyy-MM-dd}.%i.log - 50MB + 10MB 30 500MB