From a6480edc1d366bfeead1eb2784be13ae747e3f23 Mon Sep 17 00:00:00 2001 From: 1 <1@123> Date: 星期一, 12 五月 2025 17:12:24 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/thread/RgvThread.java | 121 +++++++++++++++++++++++++++++++++++++--- 1 files changed, 111 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java index d354a5b..386207f 100644 --- a/src/main/java/com/zy/core/thread/RgvThread.java +++ b/src/main/java/com/zy/core/thread/RgvThread.java @@ -48,11 +48,11 @@ // private RgvProtocol rgvProtocol; private TaskProtocolCache taskProtocolCache = new TaskProtocolCache(); // # 杞ㄩ亾鎬婚暱 - private Long trackEntireLength = 100L; + private Long trackEntireLength = 215000L; //# 杞ㄩ亾鍩哄噯鐐� - private Long trackBenchmark = 100L; + private Long trackBenchmark = 1L; // # 閬胯璺濈 - private Long avoidDistance = 100L; + private Long avoidDistance = 5000L; /** * 宸ヤ綅1澶嶄綅淇″彿 @@ -81,6 +81,7 @@ // 鍚姩婕父绾跨▼ new Thread(this::taskWalkIssued).start(); + new Thread(this::taskWalkIssued2).start(); // 鍚姩浠诲姟瀹屾垚绾跨▼ new Thread(this::taskComplete).start(); @@ -114,7 +115,7 @@ OperateResultExOne<byte[]> result = siemensNet.Read("DB100.12", (short) 1); boolean[] status = siemensNet.getByteTransform().TransBool(result.Content, 0, 1); if (status[0]){ - OperateResult result4 = siemensNet.Write("DB100.12.0", true); + OperateResult result4 = siemensNet.Write("DB100.12.0", false); } } catch (Exception e) { log.error("RGV鏁版嵁璇诲彇绾跨▼寮傚父锛侊紒锛�" + e.getMessage()); @@ -124,6 +125,64 @@ } + } + + /** + * 浠诲姟涓嬪彂 + */ + 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 { + Thread.sleep(100); + TaskProtocol issued = new TaskProtocol(taskProtocol,true); + write(issued); + taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection()); + break; + } + } + } + } catch (Exception e) { + log.error("RGV鍙栬揣浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�" + e.getMessage()); +// e.printStackTrace(); + } + } } /** @@ -149,6 +208,8 @@ TaskProtocol issued = new TaskProtocol(); issued.setTaskNo(32222L); issued.setTargetPosition(rgvTaskProtocol.getAvoidingTheDestination()); + issued.setTaskStatus(1); + issued.setDirection(true); write(issued); rgvTaskProtocol.setAvoid(0); @@ -186,11 +247,14 @@ if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE)){ continue; } + if (rgvProtocol.getLoaded() == -1){ + continue; + } List<TaskProtocol> allTakeTaskProtocol = taskProtocolCache.getTakeOrPutTaskProtocol(rgvProtocol.getLoaded()); for (TaskProtocol taskProtocol : allTakeTaskProtocol) { if (taskProtocol.getIsRunning() == 1) {//鍑嗗涓嬪彂 - RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); +// RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); //鍙岃溅 if (rgvOtherStatusEnable()) { //鍙︿竴鍙拌溅鏄惁鍏佽姝ゅ彴杞︽墽琛� @@ -203,15 +267,12 @@ Thread.sleep(100); TaskProtocol issued = new TaskProtocol(taskProtocol); write(issued); - taskProtocol.setIsRunning(4); - taskProtocolCache.updateTaskProtocol(taskProtocol); + taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection()); break; } else { Thread.sleep(100); TaskProtocol issued = new TaskProtocol(taskProtocol,true); write(issued); -// taskProtocol.setIsRunning(4); -// taskProtocolCache.updateTaskProtocol(taskProtocol); break; } } @@ -282,6 +343,10 @@ log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); return false; } + long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); + if (avoidAbs<51){ + return true; + } rgvTaskProtocolOther.setAvoid(1); rgvTaskProtocolOther.setAvoidingTheDestination(avoid); RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther); @@ -297,6 +362,10 @@ if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) { log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); return false; + } + long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); + if (avoidAbs<51){ + return true; } rgvTaskProtocolOther.setAvoid(1); rgvTaskProtocolOther.setAvoidingTheDestination(avoid); @@ -315,12 +384,22 @@ log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); return false; } + long avoidAbs = Math.abs(avoid - rgvProtocol.getRgvPos()); + if (avoidAbs<51){ + return false; + } rgvTaskProtocol.setAvoid(1); rgvTaskProtocol.setAvoidingTheDestination(avoid); RgvTaskCache.updateRgvStatus(rgvTaskProtocol); return false; } return false; + } + } else { + if ((rgvProtocolOther.getRgvPosDestinationOrPos(true) - rgvProtocolOther.getCarBodyJiaoMing()) + - (targetPosition + rgvProtocol.getCarBodyKunPeng()) + > avoidDistance) {//鏃犻渶閬胯 + return true; } } } else { @@ -334,6 +413,10 @@ if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) { log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); return false; + } + long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); + if (avoidAbs<51){ + return true; } rgvTaskProtocolOther.setAvoid(1); rgvTaskProtocolOther.setAvoidingTheDestination(avoid); @@ -350,6 +433,10 @@ if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) { log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); return false; + } + long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); + if (avoidAbs<51){ + return true; } rgvTaskProtocolOther.setAvoid(1); rgvTaskProtocolOther.setAvoidingTheDestination(avoid); @@ -369,12 +456,22 @@ log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); return false; } + long avoidAbs = Math.abs(avoid - rgvProtocol.getRgvPos()); + if (avoidAbs<51){ + return false; + } rgvTaskProtocol.setAvoid(1); rgvTaskProtocol.setAvoidingTheDestination(avoid); RgvTaskCache.updateRgvStatus(rgvTaskProtocol); return false; } return false; + } + } else { + if ((rgvProtocolOther.getRgvPosDestinationOrPos(false) - rgvProtocolOther.getCarBodyJiaoMing()) + - (targetPosition + rgvProtocol.getCarBodyKunPeng()) + > avoidDistance) {//鏃犻渶閬胯 + return true; } } } @@ -459,8 +556,10 @@ RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); if (rgvProtocol == null) { rgvProtocol = new RgvProtocol(); - rgvProtocol.setRgvNo(slave.getId()); } + rgvProtocol.setRgvNo(slave.getId()); + rgvProtocol.setCarBodyJiaoMing(slave.getCarBodyJiaoMing()); + rgvProtocol.setCarBodyKunPeng(slave.getCarBodyKunPeng()); rgvProtocol.setRgvPos((long)siemensNet.getByteTransform().TransInt32(result.Content, 0)); rgvProtocol.setRgvPosDestination((long)siemensNet.getByteTransform().TransInt32(result.Content, 4)); @@ -541,6 +640,8 @@ // convertRow(command); // taskProtocol.setRgvNo(slave.getId()); Long[] array = new Long[11]; + OperateResult result41 = siemensNet.Write("DB100.12.0", false); + // array[0] = taskProtocol.getAckFinish1(); // array[1] = taskProtocol.getTaskNo(); // array[2] = taskProtocol.getTaskMode(); -- Gitblit v1.9.1