From 95242f772e40b24726fd52137d76b217f3bf0b0e Mon Sep 17 00:00:00 2001 From: zc Date: Tue, 7 Apr 2026 17:40:42 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=B0=E9=87=8D=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../top/wms/admin/light/LightService.java | 93 ++++++++++++------- .../controller/light/LightController.java | 1 - .../weighManage/ah/AHDZCConnect.java | 2 +- 3 files changed, 59 insertions(+), 37 deletions(-) diff --git a/wms-module-system/src/main/java/top/wms/admin/light/LightService.java b/wms-module-system/src/main/java/top/wms/admin/light/LightService.java index 0f17b6a..4c26f20 100644 --- a/wms-module-system/src/main/java/top/wms/admin/light/LightService.java +++ b/wms-module-system/src/main/java/top/wms/admin/light/LightService.java @@ -4,7 +4,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import top.wms.admin.common.enums.CommandTypeEnum; -import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; /** @@ -16,34 +15,40 @@ import java.nio.charset.StandardCharsets; public class LightService { private SerialPortHandler serialHandler; + private final Object connectLock = new Object(); /** * 连接控制器 * 前端页面进入"称重管理"页面时调用 */ public boolean connect() { - try { - // 先关闭旧的连接(如果存在) - if (serialHandler != null) { - log.info("关闭旧的串口连接"); - serialHandler.close(); + synchronized (connectLock) { + try { + // 先关闭旧的连接(如果存在) + if (serialHandler != null) { + log.info("关闭旧的串口连接"); + serialHandler.close(); + serialHandler = null; + } + + // 使用COM1串口 + String portName = "COM1"; + // 默认波特率9600 + int baudRate = 9600; + serialHandler = new SerialPortHandler(portName, baudRate); + boolean connected = serialHandler.open(); + if (connected) { + log.info("数字控制器连接成功"); + } else { + log.error("数字控制器连接失败"); + } + return connected; + } catch (Exception e) { + log.error("连接失败: {}", e.getMessage()); + // 确保异常情况下serialHandler为null serialHandler = null; + return false; } - // 使用COM1串口 - String portName = "COM1"; - // 默认波特率9600 - int baudRate = 9600; - serialHandler = new SerialPortHandler(portName, baudRate); - boolean connected = serialHandler.open(); - if (connected) { - log.info("数字控制器连接成功"); - } else { - log.error("数字控制器连接失败"); - } - return connected; - } catch (Exception e) { - log.error("连接失败: {}", e.getMessage()); - return false; } } @@ -52,11 +57,18 @@ public class LightService { * 前端页面离开"称重管理"页面时调用 */ public void disconnect() { - if (serialHandler != null) { - log.info("正在断开数字控制器连接"); - serialHandler.close(); - serialHandler = null; - log.info("数字控制器连接已断开"); + synchronized (connectLock) { + if (serialHandler != null) { + log.info("正在断开数字控制器连接"); + try { + serialHandler.close(); + } catch (Exception e) { + log.error("关闭串口失败: {}", e.getMessage()); + } finally { + serialHandler = null; + log.info("数字控制器连接已断开"); + } + } } } @@ -65,7 +77,9 @@ public class LightService { * @return 已连接返回true,否则返回false */ public boolean isConnected() { - return serialHandler != null && serialHandler.isOpen(); + synchronized (connectLock) { + return serialHandler != null && serialHandler.isOpen(); + } } /** @@ -73,11 +87,13 @@ public class LightService { * @return 重连成功返回true,否则返回false */ public boolean checkAndReconnect() { - if (isConnected()) { - return true; + synchronized (connectLock) { + if (isConnected()) { + return true; + } + log.warn("串口连接异常,尝试重新连接"); + return connect(); } - log.warn("串口连接异常,尝试重新连接"); - return connect(); } /** @@ -85,11 +101,18 @@ public class LightService { * @return 重连成功返回true,否则返回false */ public boolean reconnect() { - if (serialHandler != null) { - serialHandler.close(); - serialHandler = null; + synchronized (connectLock) { + if (serialHandler != null) { + try { + serialHandler.close(); + } catch (Exception e) { + log.error("关闭串口失败: {}", e.getMessage()); + } finally { + serialHandler = null; + } + } + return connect(); } - return connect(); } /** diff --git a/wms-webapi/src/main/java/top/wms/admin/controller/light/LightController.java b/wms-webapi/src/main/java/top/wms/admin/controller/light/LightController.java index 7bbb01a..8e02cda 100644 --- a/wms-webapi/src/main/java/top/wms/admin/controller/light/LightController.java +++ b/wms-webapi/src/main/java/top/wms/admin/controller/light/LightController.java @@ -1,6 +1,5 @@ package top.wms.admin.controller.light; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson2.JSONObject; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/wms-webapi/src/main/java/top/wms/admin/controller/weighManage/ah/AHDZCConnect.java b/wms-webapi/src/main/java/top/wms/admin/controller/weighManage/ah/AHDZCConnect.java index 7cc1d59..a7c0c8a 100644 --- a/wms-webapi/src/main/java/top/wms/admin/controller/weighManage/ah/AHDZCConnect.java +++ b/wms-webapi/src/main/java/top/wms/admin/controller/weighManage/ah/AHDZCConnect.java @@ -27,7 +27,7 @@ import java.util.regex.Pattern; @Slf4j public class AHDZCConnect { - private static final String PORT_NAME = "COM5"; + private static final String PORT_NAME = "COM12"; private static final int BAUD_RATE = 9600; private static final int DATA_BITS = 8; private static final int STOP_BITS = 1;