From c8de85433e5800a7b5595a96d99f4b49f24c38b4 Mon Sep 17 00:00:00 2001
From: Junjie <DELL@qq.com>
Date: 星期二, 16 十二月 2025 13:11:23 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/thread/impl/ZyRgvThread.java | 19 +++++-
src/main/java/com/zy/core/network/ZyRgvConnectDriver.java | 26 +++++++-
src/main/java/com/zy/core/network/ZyCrnConnectDriver.java | 26 +++++++-
src/main/java/com/zy/core/network/ZyStationConnectDriver.java | 27 +++++++-
src/main/java/com/zy/core/thread/impl/ZyStationThread.java | 31 ++++++++-
src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java | 20 +++++-
src/main/java/com/zy/core/MainProcess.java | 3 +
src/main/java/com/zy/core/ServerBootstrap.java | 24 ++++++++
8 files changed, 150 insertions(+), 26 deletions(-)
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 0d30d2b..ab04415 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -47,6 +47,9 @@
mainProcessPluginApi.run();
// 闂撮殧
Thread.sleep(200);
+ } catch (InterruptedException ie) {
+ Thread.currentThread().interrupt();
+ break;
} catch (Exception e) {
e.printStackTrace();
}
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index b0cb5a0..dcf52e6 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -131,6 +131,30 @@
@PreDestroy
public void destroy() {
+ try {
+ List<DeviceConfig> crnList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+ .eq("device_type", String.valueOf(SlaveType.Crn)));
+ for (DeviceConfig deviceConfig : crnList) {
+ SlaveConnection.remove(SlaveType.Crn, deviceConfig.getDeviceNo());
+ }
+ } catch (Exception ignore) {}
+ try {
+ List<DeviceConfig> devpList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+ .eq("device_type", String.valueOf(SlaveType.Devp)));
+ for (DeviceConfig deviceConfig : devpList) {
+ SlaveConnection.remove(SlaveType.Devp, deviceConfig.getDeviceNo());
+ }
+ } catch (Exception ignore) {}
+ try {
+ List<DeviceConfig> rgvList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+ .eq("device_type", String.valueOf(SlaveType.Rgv)));
+ for (DeviceConfig deviceConfig : rgvList) {
+ SlaveConnection.remove(SlaveType.Rgv, deviceConfig.getDeviceNo());
+ }
+ } catch (Exception ignore) {}
+ try {
+ mainProcess.shutDown();
+ } catch (Exception ignore) {}
}
diff --git a/src/main/java/com/zy/core/network/ZyCrnConnectDriver.java b/src/main/java/com/zy/core/network/ZyCrnConnectDriver.java
index 6691d0b..22a1778 100644
--- a/src/main/java/com/zy/core/network/ZyCrnConnectDriver.java
+++ b/src/main/java/com/zy/core/network/ZyCrnConnectDriver.java
@@ -1,6 +1,5 @@
package com.zy.core.network;
-import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.zy.asrs.entity.DeviceConfig;
import com.zy.core.ThreadHandler;
import com.zy.core.model.CommandResponse;
@@ -20,6 +19,8 @@
private boolean connected = false;
private DeviceConfig deviceConfig;
private ZyCrnConnectApi zyCrnConnectApi;
+ private volatile boolean closed = false;
+ private Thread selfThread;
public ZyCrnConnectDriver(DeviceConfig deviceConfig) {
this.deviceConfig = deviceConfig;
@@ -28,13 +29,16 @@
@Override
@SuppressWarnings("InfiniteLoopStatement")
public void run() {
- while (!Thread.currentThread().isInterrupted()) {
+ selfThread = Thread.currentThread();
+ while (!closed && !Thread.currentThread().isInterrupted()) {
try {
if (!connected) {
connect();
}
-
Thread.sleep(1000);
+ } catch (InterruptedException ie) {
+ Thread.currentThread().interrupt();
+ break;
} catch (Exception e) {
e.printStackTrace();
}
@@ -56,11 +60,23 @@
@Override
public void close() {
- zyCrnConnectApi.disconnect();
- zyCrnConnectApi = null;
+ closed = true;
+ Thread t = selfThread;
+ if (t != null) {
+ try { t.interrupt(); } catch (Exception ignore) {}
+ }
+ if (zyCrnConnectApi != null) {
+ zyCrnConnectApi.disconnect();
+ zyCrnConnectApi = null;
+ }
connected = false;
}
+ public void start() {
+ Thread t = new Thread(this);
+ t.start();
+ }
+
public ZyCrnStatusEntity getStatus() {
if (zyCrnConnectApi == null) {
return null;
diff --git a/src/main/java/com/zy/core/network/ZyRgvConnectDriver.java b/src/main/java/com/zy/core/network/ZyRgvConnectDriver.java
index bd015f1..9b82eea 100644
--- a/src/main/java/com/zy/core/network/ZyRgvConnectDriver.java
+++ b/src/main/java/com/zy/core/network/ZyRgvConnectDriver.java
@@ -15,6 +15,8 @@
private boolean connected = false;
private DeviceConfig deviceConfig;
private ZyRgvConnectApi zyRgvConnectApi;
+ private volatile boolean closed = false;
+ private Thread selfThread;
public ZyRgvConnectDriver(DeviceConfig deviceConfig) {
this.deviceConfig = deviceConfig;
@@ -23,12 +25,16 @@
@Override
@SuppressWarnings("InfiniteLoopStatement")
public void run() {
- while (!Thread.currentThread().isInterrupted()) {
+ selfThread = Thread.currentThread();
+ while (!closed && !Thread.currentThread().isInterrupted()) {
try {
if (!connected) {
connect();
}
Thread.sleep(1000);
+ } catch (InterruptedException ie) {
+ Thread.currentThread().interrupt();
+ break;
} catch (Exception e) {
e.printStackTrace();
}
@@ -49,9 +55,21 @@
@Override
public void close() {
- zyRgvConnectApi.disconnect();
- zyRgvConnectApi = null;
+ closed = true;
+ Thread t = selfThread;
+ if (t != null) {
+ try { t.interrupt(); } catch (Exception ignore) {}
+ }
+ if (zyRgvConnectApi != null) {
+ zyRgvConnectApi.disconnect();
+ zyRgvConnectApi = null;
+ }
connected = false;
+ }
+
+ public void start() {
+ Thread t = new Thread(this);
+ t.start();
}
public ZyRgvStatusEntity getStatus() {
@@ -64,4 +82,4 @@
public CommandResponse sendCommand(RgvCommand command) {
return zyRgvConnectApi.sendCommand(command);
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/zy/core/network/ZyStationConnectDriver.java b/src/main/java/com/zy/core/network/ZyStationConnectDriver.java
index 1d722d6..13e68d7 100644
--- a/src/main/java/com/zy/core/network/ZyStationConnectDriver.java
+++ b/src/main/java/com/zy/core/network/ZyStationConnectDriver.java
@@ -1,6 +1,5 @@
package com.zy.core.network;
-import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.zy.asrs.entity.DeviceConfig;
import com.zy.core.ThreadHandler;
import com.zy.core.model.CommandResponse;
@@ -21,6 +20,8 @@
private boolean connected = false;
private DeviceConfig deviceConfig;
private ZyStationConnectApi zyStationConnectApi;
+ private volatile boolean closed = false;
+ private Thread selfThread;
public ZyStationConnectDriver(DeviceConfig deviceConfig) {
this.deviceConfig = deviceConfig;
@@ -29,12 +30,16 @@
@Override
@SuppressWarnings("InfiniteLoopStatement")
public void run() {
- while (!Thread.currentThread().isInterrupted()) {
+ selfThread = Thread.currentThread();
+ while (!closed && !Thread.currentThread().isInterrupted()) {
try {
if (!connected) {
connect();
}
Thread.sleep(1000);
+ } catch (InterruptedException ie) {
+ Thread.currentThread().interrupt();
+ break;
} catch (Exception e) {
e.printStackTrace();
}
@@ -56,9 +61,21 @@
@Override
public void close() {
- zyStationConnectApi.disconnect();
- zyStationConnectApi = null;
+ closed = true;
+ Thread t = selfThread;
+ if (t != null) {
+ try { t.interrupt(); } catch (Exception ignore) {}
+ }
+ if (zyStationConnectApi != null) {
+ zyStationConnectApi.disconnect();
+ zyStationConnectApi = null;
+ }
connected = false;
+ }
+
+ public void start() {
+ Thread t = new Thread(this);
+ t.start();
}
public List<ZyStationStatusEntity> getStatus() {
@@ -71,4 +88,4 @@
public CommandResponse sendCommand(StationCommand command) {
return zyStationConnectApi.sendCommand(command);
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/zy/core/thread/impl/ZyRgvThread.java b/src/main/java/com/zy/core/thread/impl/ZyRgvThread.java
index 420650f..e5c2d77 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyRgvThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyRgvThread.java
@@ -40,6 +40,8 @@
private ZyRgvConnectDriver zyRgvConnectDriver;
private RgvProtocol rgvProtocol;
private int deviceLogCollectTime = 200;
+ private volatile boolean closed = false;
+ private Thread mainThread;
public ZyRgvThread(DeviceConfig deviceConfig, RedisUtil redisUtil) {
this.deviceConfig = deviceConfig;
@@ -51,7 +53,8 @@
public void run() {
connect();
initRgv();
- while (!Thread.currentThread().isInterrupted()) {
+ mainThread = Thread.currentThread();
+ while (!closed && !Thread.currentThread().isInterrupted()) {
try {
deviceLogCollectTime = Utils.getDeviceLogCollectTime();
int step = 1;
@@ -70,6 +73,9 @@
break;
}
Thread.sleep(200);
+ } catch (InterruptedException ie) {
+ Thread.currentThread().interrupt();
+ break;
} catch (Exception e) {
e.printStackTrace();
}
@@ -92,7 +98,7 @@
@Override
public boolean connect() {
zyRgvConnectDriver = new ZyRgvConnectDriver(deviceConfig);
- new Thread(zyRgvConnectDriver).start();
+ zyRgvConnectDriver.start();
DeviceConnectPool.put(SlaveType.Rgv, deviceConfig.getDeviceNo(), zyRgvConnectDriver);
return true;
}
@@ -151,7 +157,14 @@
@Override
public void close() {
- zyRgvConnectDriver.close();
+ closed = true;
+ Thread t = mainThread;
+ if (t != null) {
+ try { t.interrupt(); } catch (Exception ignore) {}
+ }
+ if (zyRgvConnectDriver != null) {
+ zyRgvConnectDriver.close();
+ }
}
@Override
diff --git a/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java b/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java
index 77683af..d8decf5 100644
--- a/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java
@@ -45,6 +45,8 @@
private CrnProtocol crnProtocol;
private int deviceLogCollectTime = 200;
private boolean resetFlag = false;
+ private volatile boolean closed = false;
+ private Thread mainThread;
public ZySiemensCrnThread(DeviceConfig deviceConfig, RedisUtil redisUtil) {
this.deviceConfig = deviceConfig;
@@ -56,7 +58,8 @@
public void run() {
this.connect();
this.initCrn();
- while (!Thread.currentThread().isInterrupted()) {
+ mainThread = Thread.currentThread();
+ while (!closed && !Thread.currentThread().isInterrupted()) {
try {
deviceLogCollectTime = Utils.getDeviceLogCollectTime();
int step = 1;
@@ -65,7 +68,6 @@
step = task.getStep();
}
switch (step) {
- // 璇绘暟鎹�
case 1:
readStatus();
break;
@@ -76,6 +78,9 @@
break;
}
Thread.sleep(200);
+ } catch (InterruptedException ie) {
+ Thread.currentThread().interrupt();
+ break;
} catch (Exception e) {
e.printStackTrace();
}
@@ -112,7 +117,7 @@
@Override
public boolean connect() {
zyCrnConnectDriver = new ZyCrnConnectDriver(deviceConfig);
- new Thread(zyCrnConnectDriver).start();
+ zyCrnConnectDriver.start();
DeviceConnectPool.put(SlaveType.Crn, deviceConfig.getDeviceNo(), zyCrnConnectDriver);
return true;
}
@@ -211,7 +216,14 @@
@Override
public void close() {
- zyCrnConnectDriver.close();
+ closed = true;
+ Thread t = mainThread;
+ if (t != null) {
+ try { t.interrupt(); } catch (Exception ignore) {}
+ }
+ if (zyCrnConnectDriver != null) {
+ zyCrnConnectDriver.close();
+ }
}
@Override
diff --git a/src/main/java/com/zy/core/thread/impl/ZyStationThread.java b/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
index 3d932ea..6eb4b94 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
@@ -45,6 +45,9 @@
private ZyStationConnectDriver zyStationConnectDriver;
private int deviceLogCollectTime = 200;
private long deviceDataLogTime = System.currentTimeMillis();
+ private volatile boolean closed = false;
+ private Thread mainThread;
+ private Thread readThread;
public ZyStationThread(DeviceConfig deviceConfig, RedisUtil redisUtil) {
this.deviceConfig = deviceConfig;
@@ -56,13 +59,16 @@
public void run() {
this.connect();
deviceLogCollectTime = Utils.getDeviceLogCollectTime();
+ mainThread = Thread.currentThread();
- //璁惧璇诲彇
- Thread readThread = new Thread(() -> {
- while (!Thread.currentThread().isInterrupted()) {
+ readThread = new Thread(() -> {
+ while (!closed && !Thread.currentThread().isInterrupted()) {
try {
readStatus();
Thread.sleep(200);
+ } catch (InterruptedException ie) {
+ Thread.currentThread().interrupt();
+ break;
} catch (Exception e) {
log.error("StationThread Fail", e);
}
@@ -70,7 +76,7 @@
});
readThread.start();
- while (!Thread.currentThread().isInterrupted()) {
+ while (!closed && !Thread.currentThread().isInterrupted()) {
try {
int step = 1;
Task task = MessageQueue.poll(SlaveType.Devp, deviceConfig.getDeviceNo());
@@ -85,6 +91,9 @@
break;
}
Thread.sleep(200);
+ } catch (InterruptedException ie) {
+ Thread.currentThread().interrupt();
+ break;
} catch (Exception e) {
e.printStackTrace();
}
@@ -160,13 +169,25 @@
@Override
public boolean connect() {
zyStationConnectDriver = new ZyStationConnectDriver(deviceConfig);
- new Thread(zyStationConnectDriver).start();
+ zyStationConnectDriver.start();
DeviceConnectPool.put(SlaveType.Devp, deviceConfig.getDeviceNo(), zyStationConnectDriver);
return true;
}
@Override
public void close() {
+ closed = true;
+ Thread t = mainThread;
+ if (t != null) {
+ try { t.interrupt(); } catch (Exception ignore) {}
+ }
+ Thread rt = readThread;
+ if (rt != null) {
+ try { rt.interrupt(); } catch (Exception ignore) {}
+ }
+ if (zyStationConnectDriver != null) {
+ zyStationConnectDriver.close();
+ }
}
@Override
--
Gitblit v1.9.1