From da9823ee1843e98fa0a601ab6a248f0d7fe83602 Mon Sep 17 00:00:00 2001 From: zc Date: Tue, 7 Apr 2026 14:58:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=81=AF=E5=85=89=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../top/wms/admin/light/LightService.java | 37 ++++++++++++++++--- .../wms/admin/light/SerialPortHandler.java | 4 ++ 2 files changed, 36 insertions(+), 5 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 184ea18..0f17b6a 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 @@ -23,6 +23,12 @@ public class LightService { */ public boolean connect() { try { + // 先关闭旧的连接(如果存在) + if (serialHandler != null) { + log.info("关闭旧的串口连接"); + serialHandler.close(); + serialHandler = null; + } // 使用COM1串口 String portName = "COM1"; // 默认波特率9600 @@ -62,6 +68,30 @@ public class LightService { return serialHandler != null && serialHandler.isOpen(); } + /** + * 检查连接状态并尝试重连 + * @return 重连成功返回true,否则返回false + */ + public boolean checkAndReconnect() { + if (isConnected()) { + return true; + } + log.warn("串口连接异常,尝试重新连接"); + return connect(); + } + + /** + * 重新连接控制器 + * @return 重连成功返回true,否则返回false + */ + public boolean reconnect() { + if (serialHandler != null) { + serialHandler.close(); + serialHandler = null; + } + return connect(); + } + /** * 打开指定通道 * @param channel 通道号 (1-2) @@ -109,7 +139,7 @@ public class LightService { * 发送命令到控制器 */ private boolean sendCommand(CommandTypeEnum type, int channel, int brightness) { - if (serialHandler == null || !serialHandler.isOpen()) { + if (!checkAndReconnect()) { log.error("控制器未连接"); return false; } @@ -138,15 +168,12 @@ public class LightService { * 发送读取命令并获取返回值 */ private int sendReadCommand(int channel) { - if (serialHandler == null || !serialHandler.isOpen()) { + if (!checkAndReconnect()) { log.error("控制器未连接"); return -1; } byte[] command = buildCommand(CommandTypeEnum.READ, channel, 0); - if (command == null) { - return -1; - } // 发送命令 serialHandler.sendData(command); diff --git a/wms-module-system/src/main/java/top/wms/admin/light/SerialPortHandler.java b/wms-module-system/src/main/java/top/wms/admin/light/SerialPortHandler.java index 21111b6..be618b4 100644 --- a/wms-module-system/src/main/java/top/wms/admin/light/SerialPortHandler.java +++ b/wms-module-system/src/main/java/top/wms/admin/light/SerialPortHandler.java @@ -264,9 +264,11 @@ public class SerialPortHandler { try { if (inputStream != null) { inputStream.close(); + inputStream = null; } if (outputStream != null) { outputStream.close(); + outputStream = null; } if (serialPort != null && serialPort.isOpen()) { serialPort.closePort(); @@ -274,6 +276,8 @@ public class SerialPortHandler { } } catch (IOException e) { log.error("关闭串口失败: {}", e.getMessage()); + }finally { + serialPort = null; } }