From 97cfc84c932f52c6419eebfd4888f2d8212edb5b Mon Sep 17 00:00:00 2001
From: 野心家 <1051256694@qq.com>
Date: 星期一, 26 五月 2025 22:46:04 +0800
Subject: [PATCH] #ZH
---
src/main/java/com/zy/core/thread/RgvThread.java | 320 ++++++++++++++++++++++++++++++++++-------------------
1 files changed, 206 insertions(+), 114 deletions(-)
diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index 723c1c1..561a4e5 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -56,6 +56,7 @@
private Long trackBenchmark = 1L;
// # 閬胯璺濈
private Long avoidDistance = 5000L;
+ private Long currentTimeMilliOld = 0L;
/**
* 宸ヤ綅1澶嶄綅淇″彿
@@ -132,6 +133,7 @@
while (true) {
try {
Thread.sleep(20);
+ System.out.println("璇荤嚎绋�"+ slave.getId());
readStatus();
@@ -187,103 +189,103 @@
/**
* 浠诲姟涓嬪彂
*/
- private void taskWalkIssued2() {
- while (true) {
- try {
- // 浼戠湢 1 绉�
- Thread.sleep(100);
- if (!deviceDetection()) {
- continue;
- }
- RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
- RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
- if (rgvProtocol == null || rgvTaskProtocol == null) {
- initRgv();
- rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
- rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
- }
- if (rgvTaskProtocol.getAvoid() != 0) {
- continue;
- }
- if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE)){
- continue;
- }
- if (rgvProtocol.getLoaded() == -1){
- continue;
- }
-
- List<TaskProtocol> allTakeTaskProtocol = taskProtocolCache.getAllWalkTaskProtocol();
- for (TaskProtocol taskProtocol : allTakeTaskProtocol) {
- if (taskProtocol.getIsRunning() == 1) {//鍑嗗涓嬪彂
- // 鍙岃溅
- if (rgvOtherStatusEnable()) {
- //鍙︿竴鍙拌溅鏄惁鍏佽姝ゅ彴杞︽墽琛�
- if (!otherRgvAvoid(taskProtocol.getTargetPosition())) {
- continue;
- }
- }
- if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50
- && taskProtocol.getTargetPosition()>=rgvProtocol.getRgvPos()-50){
- taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection());
- break;
- } else {
- TaskProtocol issued = new TaskProtocol(taskProtocol,true);
- write(issued);
- taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection());
- break;
- }
- }
- }
- } catch (Exception e) {
- log.error("RGV浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
- try{
- DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
- deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV浠诲姟涓嬪彂绾跨▼寮傚父"+e.getMessage());
- } catch (Exception e2){
- log.error("e2:"+e2.getMessage());
- }
-// e.printStackTrace();
- }
- }
- }
+// private void taskWalkIssued2() {
+// while (true) {
+// try {
+// // 浼戠湢 1 绉�
+// Thread.sleep(100);
+// if (!deviceDetection()) {
+// continue;
+// }
+// RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+// RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+// if (rgvProtocol == null || rgvTaskProtocol == null) {
+// initRgv();
+// rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+// rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+// }
+// if (rgvTaskProtocol.getAvoid() != 0) {
+// continue;
+// }
+// if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE)){
+// continue;
+// }
+// if (rgvProtocol.getLoaded() == -1){
+// continue;
+// }
+//
+// List<TaskProtocol> allTakeTaskProtocol = taskProtocolCache.getAllWalkTaskProtocol();
+// for (TaskProtocol taskProtocol : allTakeTaskProtocol) {
+// if (taskProtocol.getIsRunning() == 1) {//鍑嗗涓嬪彂
+// // 鍙岃溅
+// if (rgvOtherStatusEnable()) {
+// //鍙︿竴鍙拌溅鏄惁鍏佽姝ゅ彴杞︽墽琛�
+// if (!otherRgvAvoid(taskProtocol.getTargetPosition())) {
+// continue;
+// }
+// }
+// if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50
+// && taskProtocol.getTargetPosition()>=rgvProtocol.getRgvPos()-50){
+// taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection());
+// break;
+// } else {
+// TaskProtocol issued = new TaskProtocol(taskProtocol,true);
+// write(issued);
+// taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection());
+// break;
+// }
+// }
+// }
+// } catch (Exception e) {
+// log.error("RGV浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+// try{
+// DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+// deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV浠诲姟涓嬪彂绾跨▼寮傚父"+e.getMessage());
+// } catch (Exception e2){
+// log.error("e2:"+e2.getMessage());
+// }
+//// e.printStackTrace();
+// }
+// }
+// }
/**
* 婕父
*/
- private void taskWalkIssued() {
- while (true) {
- try {
- // 浼戠湢 1 绉�
- Thread.sleep(100);
-
- if (!deviceDetection()) {
- continue;
- }
- RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
- if (rgvTaskProtocol == null) {
- initRgv();
- rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
- }
- if (rgvTaskProtocol.getAvoid() != 1) {
- continue;
- }
- TaskProtocol issued = new TaskProtocol();
- issued.setTaskNo(32222L);
- issued.setTargetPosition(rgvTaskProtocol.getAvoidingTheDestination());
- issued.setTaskStatus(1);
- issued.setDirection(true);
- write(issued);
- rgvTaskProtocol.setAvoid(0);
-
- Thread.sleep(200);
- RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
-
- } catch (Exception e) {
- log.error("RGV琛岃蛋浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�" + e.getMessage());
-// e.printStackTrace();
- }
- }
- }
+// private void taskWalkIssued() {
+// while (true) {
+// try {
+// // 浼戠湢 1 绉�
+// Thread.sleep(100);
+//
+// if (!deviceDetection()) {
+// continue;
+// }
+// RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+// if (rgvTaskProtocol == null) {
+// initRgv();
+// rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+// }
+// if (rgvTaskProtocol.getAvoid() != 1) {
+// continue;
+// }
+// TaskProtocol issued = new TaskProtocol();
+// issued.setTaskNo(32222L);
+// issued.setTargetPosition(rgvTaskProtocol.getAvoidingTheDestination());
+// issued.setTaskStatus(1);
+// issued.setDirection(true);
+// write(issued);
+// rgvTaskProtocol.setAvoid(0);
+//
+// Thread.sleep(200);
+// RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+//
+// } catch (Exception e) {
+// log.error("RGV琛岃蛋浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�" + e.getMessage());
+//// e.printStackTrace();
+// }
+// }
+// }
/**
* 浠诲姟涓嬪彂
@@ -292,10 +294,20 @@
while (true) {
try {
// 浼戠湢 1 绉�
- Thread.sleep(50);
- if (!deviceDetection()) {
+ if (System.currentTimeMillis() - currentTimeMilliOld > 100) {
+ currentTimeMilliOld = System.currentTimeMillis()+50;
+ } else {
continue;
}
+ if (!deviceDetection()) {
+ currentTimeMilliOld = System.currentTimeMillis()+50;
+ continue;
+ }
+ if (!signRunStart()){
+ currentTimeMilliOld = System.currentTimeMillis()+50;
+ continue;
+ }
+
RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
if (rgvProtocol == null || rgvTaskProtocol == null) {
@@ -303,10 +315,14 @@
rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
}
- if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE)){
+ if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)){
+ signRunEnd();
+ currentTimeMilliOld = System.currentTimeMillis()+50;
continue;
}
if (rgvProtocol.getLoaded() == -1){
+ signRunEnd();
+ currentTimeMilliOld = System.currentTimeMillis()+50;
continue;
}
if (rgvTaskProtocol.getAvoid() != 0) {
@@ -319,10 +335,12 @@
write(issued);
rgvTaskProtocol.setAvoid(0);
- try{Thread.sleep(50L);} catch (Exception e){}
+// try{Thread.sleep(50L);} catch (Exception e){}
RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
}
+ signRunEnd();
+ currentTimeMilliOld = System.currentTimeMillis()+50;
continue;
}
@@ -335,7 +353,7 @@
if (rgvOtherStatusEnable()) {
//鍙︿竴鍙拌溅鏄惁鍏佽姝ゅ彴杞︽墽琛�
if (!otherRgvAvoid(taskProtocol.getTargetPosition())) {
- continue;
+ break;
}
}
if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50
@@ -357,7 +375,7 @@
if (rgvOtherStatusEnable()) {
//鍙︿竴鍙拌溅鏄惁鍏佽姝ゅ彴杞︽墽琛�
if (!otherRgvAvoid(taskProtocol.getTargetPosition())) {
- continue;
+ break;
}
}
if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50
@@ -370,7 +388,6 @@
}
// 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
if (!staProtocol.isAutoing() || staProtocol.isLoading()
- || staProtocol.getWorkNo() != 0
){
continue;
}
@@ -387,6 +404,8 @@
}
}
}
+ signRunEnd();
+ currentTimeMilliOld = System.currentTimeMillis()+50;
} catch (Exception e) {
log.error("RGV浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
try{
@@ -399,16 +418,9 @@
}
}
}
-
- public boolean deviceDetection() {
- RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+ public boolean isSignRgvTaskProtocol() {
RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
-
- if (rgvProtocol == null || rgvTaskProtocol == null) {
- return false;
- }
- if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 || rgvProtocol.getRgvPosDestination() == 0L
- || (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
+ if (rgvTaskProtocol == null) {
return false;
}
RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
@@ -418,7 +430,89 @@
return false;
}
if (rgvProtocolOther.statusEnable) {
+ if (rgvTaskProtocolOther == null) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public boolean signRunStart() {
+ RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+ if (rgvTaskProtocol == null) {
+ return false;
+ }
+ RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
+ if (rgvTaskProtocolOther == null) {
+ return false;
+ }
+ if(!rgvTaskProtocol.isSignRun()) {
+ return false;
+ }
+ if(rgvTaskProtocolOther.isSignRun()) {
+ rgvTaskProtocol.setSignRun(rgvTaskProtocol.getRgvNo()==1);
+ RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+ return false;
+ }
+ rgvTaskProtocol.setSignRun(false);
+ RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+ return true;
+ }
+
+ public boolean signRunEnd() {
+ RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+ if (rgvTaskProtocol == null) {
+ return false;
+ }
+ RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+ if (rgvProtocolOther == null) {
+ return false;
+ }
+ if (rgvProtocolOther.statusEnable) {
+ RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
+ if (rgvTaskProtocolOther == null) {
+ return false;
+ }
+ rgvTaskProtocol.setSignRun(false);
+ RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+
+ rgvTaskProtocolOther.setSignRun(true);
+ RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther);
+ } else {
+ rgvTaskProtocol.setSignRun(true);
+ RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+ }
+ return true;
+ }
+
+
+ public boolean deviceDetection() {
+ RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+ RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+
+ if (rgvProtocol == null || rgvTaskProtocol == null) {
+ return false;
+ }
+ if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 || rgvProtocol.getRgvPosDestination() == 0L
+ || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
+ if (signRunStart()){
+ signRunEnd();
+ }
+ return false;
+ }
+ RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+ RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
+// System.out.println("rgvTaskProtocol:"+slave.getId()+"sign:"+rgvTaskProtocol.isSignRun()+"/n"+
+// "rgvTaskProtocolOther:"+slave.getOtherId()+"sign:"+rgvTaskProtocolOther.isSignRun()+"/n");
+
+ if (rgvProtocolOther == null) {
+ return false;
+ }
+ if (rgvProtocolOther.statusEnable) {
if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1 || rgvProtocolOther.getRgvPosDestination() == 0L) {
+ if (signRunStart()){
+ signRunEnd();
+ }
return false;
}
}
@@ -447,8 +541,7 @@
Long[][] avoidRange = new TrackRangeUtils().avoidRange(slave, trackEntireLength, trackBenchmark, avoidDistance);
if (new TrackRangeUtils().IsItSmall(slave)) {
-
- if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)) {
+ if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE) && (Math.abs(rgvProtocolOther.getRgvPos() - rgvProtocolOther.getRgvPosDestination())<50)) {
if ((rgvProtocolOther.getRgvPos() - rgvProtocolOther.getCarBodyJiaoMing())
- (targetPosition + rgvProtocol.getCarBodyKunPeng())
> avoidDistance - 50) {//鏃犻渶閬胯
@@ -469,7 +562,6 @@
if (signNowPosRun){
// 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
if (!staProtocol.isAutoing() || staProtocol.isLoading()
- || staProtocol.getWorkNo() != 0
){
if (targetPosition.equals(nowPosRunTask.getTargetPosition())){
if (rgvProtocolOther.getRgvPosDestination() >= rgvProtocolOther.getRgvPos()-50) {
@@ -585,7 +677,7 @@
}
}
} else {
- if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)) {
+ if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE) && (Math.abs(rgvProtocolOther.getRgvPos() - rgvProtocolOther.getRgvPosDestination())<50)) {
if ((targetPosition - rgvProtocol.getCarBodyJiaoMing())
- (rgvProtocolOther.getRgvPos() + rgvProtocolOther.getCarBodyKunPeng())
> avoidDistance - 50) {//鏃犻渶閬胯
@@ -605,7 +697,6 @@
if (signNowPosRun){
// 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
if (!staProtocol.isAutoing() || staProtocol.isLoading()
- || staProtocol.getWorkNo() != 0
){
if (targetPosition.equals(nowPosRunTask.getTargetPosition())){
if (rgvProtocolOther.getRgvPosDestination() <= rgvProtocolOther.getRgvPos() + 50) {
@@ -844,6 +935,7 @@
rgvProtocol.setErr4(status[11]);
rgvProtocol.setErr5(status[12]);
rgvProtocol.setErr6(status[13]);
+ System.out.println("璇荤嚎绋�"+ slave.getId()+"---"+JSON.toJSONString(rgvProtocol));
OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), slave.getId()));
// // 宸ヤ綅1澶嶄綅淇″彿
--
Gitblit v1.9.1