From dcdfc93b50febf61301832d91dfcddcfa1ca5403 Mon Sep 17 00:00:00 2001 From: 1 <1@123> Date: 星期三, 14 五月 2025 14:06:36 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/thread/RgvThread.java | 104 +++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 86 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java index 38b1d23..d0e09bd 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 = 224000L; //# 杞ㄩ亾鍩哄噯鐐� - private Long trackBenchmark = 100L; + private Long trackBenchmark = 1L; // # 閬胯璺濈 - private Long avoidDistance = 100L; + private Long avoidDistance = 5000L; /** * 宸ヤ綅1澶嶄綅淇″彿 @@ -63,6 +63,8 @@ */ private boolean resetFlag2 = false; + private boolean connectRgv = false; + public RgvThread(RgvSlave slave) { this.slave = slave; } @@ -70,21 +72,48 @@ @Override @SuppressWarnings("InfiniteLoopStatement") public void run() { - boolean connect = this.connect(); - if (connect) { + connectRgv = this.connect(); + while(!connectRgv){ + try { + connectRgv = this.connect(); + Thread.sleep(100); + } catch (Exception e){ - // 鍚姩璇绘暟鎹嚎绋� - new Thread(this::readStatusRgv).start(); + } + } - // 鍚姩浠诲姟涓嬪彂绾跨▼ - new Thread(this::taskIssued).start(); + // 鍚姩璇绘暟鎹嚎绋� + new Thread(this::rgvConnect).start(); - // 鍚姩婕父绾跨▼ - new Thread(this::taskWalkIssued).start(); - new Thread(this::taskWalkIssued2).start(); + new Thread(this::readStatusRgv).start(); - // 鍚姩浠诲姟瀹屾垚绾跨▼ - new Thread(this::taskComplete).start(); + // 鍚姩浠诲姟涓嬪彂绾跨▼ + new Thread(this::taskIssued).start(); + + // 鍚姩婕父绾跨▼ + new Thread(this::taskWalkIssued).start(); + new Thread(this::taskWalkIssued2).start(); + + // 鍚姩浠诲姟瀹屾垚绾跨▼ + new Thread(this::taskComplete).start(); + } + + private void rgvConnect() { + while (true) { + try { + if(!connectRgv){ + try { + connectRgv = this.connect(); + Thread.sleep(100); + } catch (Exception e){ + + } + } + } catch (Exception e) { + log.error("RGV鏁版嵁璇诲彇绾跨▼寮傚父锛侊紒锛�" + e.getMessage()); + initRgv(); +// e.printStackTrace(); + } } } @@ -264,7 +293,7 @@ } if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50 && taskProtocol.getTargetPosition()>=rgvProtocol.getRgvPos()-50){ - Thread.sleep(100); +// Thread.sleep(100); TaskProtocol issued = new TaskProtocol(taskProtocol); write(issued); taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection()); @@ -343,6 +372,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); @@ -359,6 +392,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); @@ -370,10 +407,14 @@ > avoidDistance) {//鏃犻渶閬胯 return true; } else { - if (rgvProtocolOther.getRgvPosDestination() >= rgvProtocolOther.getRgvPos()) { + if (rgvProtocolOther.getRgvPosDestination() >= rgvProtocolOther.getRgvPos()-50) { long avoid = rgvProtocolOther.getRgvPos() - rgvProtocolOther.getCarBodyJiaoMing() - avoidDistance - rgvProtocol.getCarBodyKunPeng(); if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) { log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); + return false; + } + long avoidAbs = Math.abs(avoid - rgvProtocol.getRgvPos()); + if (avoidAbs<51){ return false; } rgvTaskProtocol.setAvoid(1); @@ -382,6 +423,12 @@ return false; } return false; + } + } else { + if ((rgvProtocolOther.getRgvPosDestinationOrPos(true) - rgvProtocolOther.getCarBodyJiaoMing()) + - (targetPosition + rgvProtocol.getCarBodyKunPeng()) + > avoidDistance) {//鏃犻渶閬胯 + return true; } } } else { @@ -395,6 +442,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); @@ -412,6 +463,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); @@ -424,10 +479,14 @@ > avoidDistance) {//鏃犻渶閬胯 return true; } else { - if (rgvProtocolOther.getRgvPosDestination() <= rgvProtocolOther.getRgvPos()) { + if (rgvProtocolOther.getRgvPosDestination() <= rgvProtocolOther.getRgvPos() + 50) { long avoid = rgvProtocolOther.getRgvPos() + rgvProtocolOther.getCarBodyKunPeng() + avoidDistance + rgvProtocol.getCarBodyJiaoMing(); if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) { log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); + return false; + } + long avoidAbs = Math.abs(avoid - rgvProtocol.getRgvPos()); + if (avoidAbs<51){ return false; } rgvTaskProtocol.setAvoid(1); @@ -436,6 +495,12 @@ return false; } return false; + } + } else { + if ((rgvProtocolOther.getRgvPosDestinationOrPos(false) - rgvProtocolOther.getCarBodyJiaoMing()) + - (targetPosition + rgvProtocol.getCarBodyKunPeng()) + > avoidDistance) {//鏃犻渶閬胯 + return true; } } } @@ -520,8 +585,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)); @@ -580,6 +647,7 @@ } else { initRgv(); + connectRgv = false; // OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戣鍙朢GV plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); log.error("璇诲彇RGV plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); } -- Gitblit v1.9.1