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 | 461 +++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 317 insertions(+), 144 deletions(-) diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java index 15214fe..d0e09bd 100644 --- a/src/main/java/com/zy/core/thread/RgvThread.java +++ b/src/main/java/com/zy/core/thread/RgvThread.java @@ -13,6 +13,7 @@ import com.zy.asrs.service.BasRgvOptService; import com.zy.asrs.service.BasRgvService; import com.zy.asrs.utils.RouteUtils; +import com.zy.asrs.utils.TrackRangeUtils; import com.zy.core.ThreadHandler; import com.zy.core.cache.*; import com.zy.core.enums.RgvModeType; @@ -44,14 +45,14 @@ private SiemensS7Net siemensNet; private RgvSlave slave; -// private RgvProtocol rgvProtocol; + // 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澶嶄綅淇″彿 @@ -62,6 +63,8 @@ */ private boolean resetFlag2 = false; + private boolean connectRgv = false; + public RgvThread(RgvSlave slave) { this.slave = slave; } @@ -69,21 +72,52 @@ @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::readStatusRgv).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(); + } } } - private void readStatusRgv(){ + private void readStatusRgv() { while (true) { try { Thread.sleep(100); @@ -91,13 +125,93 @@ readStatus(); } catch (Exception e) { - log.error("RGV鏁版嵁璇诲彇绾跨▼寮傚父锛侊紒锛�"+e.getMessage()); + log.error("RGV鏁版嵁璇诲彇绾跨▼寮傚父锛侊紒锛�" + e.getMessage()); initRgv(); // e.printStackTrace(); } } + } + + /** + * 瀹屾垚 + */ + private void taskComplete() { + while (true) { + try { + Thread.sleep(100); + 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", false); + } + } catch (Exception e) { + log.error("RGV鏁版嵁璇诲彇绾跨▼寮傚父锛侊紒锛�" + e.getMessage()); + initRgv(); +// 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 { + 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(); + } + } } /** @@ -109,7 +223,7 @@ // 浼戠湢 1 绉� Thread.sleep(100); - if (!deviceDetection()){ + if (!deviceDetection()) { continue; } RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId()); @@ -123,6 +237,8 @@ TaskProtocol issued = new TaskProtocol(); issued.setTaskNo(32222L); issued.setTargetPosition(rgvTaskProtocol.getAvoidingTheDestination()); + issued.setTaskStatus(1); + issued.setDirection(true); write(issued); rgvTaskProtocol.setAvoid(0); @@ -130,7 +246,7 @@ RgvTaskCache.updateRgvStatus(rgvTaskProtocol); } catch (Exception e) { - log.error("RGV琛岃蛋浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�"+e.getMessage()); + log.error("RGV琛岃蛋浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�" + e.getMessage()); // e.printStackTrace(); } } @@ -144,7 +260,7 @@ try { // 浼戠湢 1 绉� Thread.sleep(100); - if (!deviceDetection()){ + if (!deviceDetection()) { continue; } RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); @@ -157,38 +273,51 @@ if (rgvTaskProtocol.getAvoid() != 0) { continue; } + 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()); + for (TaskProtocol taskProtocol : allTakeTaskProtocol) { + if (taskProtocol.getIsRunning() == 1) {//鍑嗗涓嬪彂 +// RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); //鍙岃溅 - if (rgvOtherStatusEnable()){ + if (rgvOtherStatusEnable()) { //鍙︿竴鍙拌溅鏄惁鍏佽姝ゅ彴杞︽墽琛� - if (!otherRgvAvoid(taskProtocol.getTargetPosition())){ + if (!otherRgvAvoid(taskProtocol.getTargetPosition())) { continue; } } - Thread.sleep(200); - TaskProtocol issued = new TaskProtocol(taskProtocol); - write(issued); - taskProtocol.setIsRunning(taskProtocol.getIsRunning() +1); - taskProtocolCache.updateTaskProtocol(taskProtocol); - break; + if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50 + && taskProtocol.getTargetPosition()>=rgvProtocol.getRgvPos()-50){ +// Thread.sleep(100); + TaskProtocol issued = new TaskProtocol(taskProtocol); + write(issued); + taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection()); + break; + } else { + Thread.sleep(100); + TaskProtocol issued = new TaskProtocol(taskProtocol,true); + write(issued); + break; + } } } } catch (Exception e) { - log.error("RGV鍙栬揣浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�"+e.getMessage()); + log.error("RGV鍙栬揣浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�" + e.getMessage()); // e.printStackTrace(); } } } - public boolean deviceDetection(){ + public boolean deviceDetection() { RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId()); - if (rgvProtocol == null || rgvTaskProtocol ==null) { + if (rgvProtocol == null || rgvTaskProtocol == null) { return false; } if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 || rgvProtocol.getRgvPosDestination() == 0L @@ -201,20 +330,20 @@ 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 (rgvProtocolOther.statusEnable) { + if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1 || rgvProtocolOther.getRgvPosDestination() == 0L) { return false; } } return true; } - public boolean rgvOtherStatusEnable(){ + public boolean rgvOtherStatusEnable() { RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); if (rgvProtocolOther == null) { return true; } - if (rgvProtocolOther.statusEnable){ + if (rgvProtocolOther.statusEnable) { // if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) { return true; // } @@ -222,136 +351,156 @@ return false; } - public boolean otherRgvAvoid(Long targetPosition){ + public boolean otherRgvAvoid(Long targetPosition) { RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId()); RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); + RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId()); + Long[][] avoidRange = new TrackRangeUtils().avoidRange(slave, trackEntireLength, trackBenchmark, avoidDistance); - if (rgvProtocol.getRgvPos()<rgvProtocolOther.getRgvPos()){ - if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)){ - if ((rgvProtocolOther.getRgvPos()-rgvProtocolOther.getCarBodyJiaoMing()) - - (targetPosition+rgvProtocol.getCarBodyKunPeng()) - > avoidDistance){//鏃犻渶閬胯 + if (new TrackRangeUtils().IsItSmall(slave)) { + + if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)) { + if ((rgvProtocolOther.getRgvPos() - rgvProtocolOther.getCarBodyJiaoMing()) + - (targetPosition + rgvProtocol.getCarBodyKunPeng()) + > avoidDistance) {//鏃犻渶閬胯 return true; } else { long avoid = targetPosition + rgvProtocol.getCarBodyKunPeng() + avoidDistance + rgvProtocolOther.getCarBodyJiaoMing(); - if (avoid > trackEntireLength-rgvProtocolOther.getCarBodyKunPeng()){ - log.error("閬胯瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); + if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) { + log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); return false; } - rgvTaskProtocol.setAvoid(1); - rgvTaskProtocol.setAvoidingTheDestination(avoid); - RgvTaskCache.updateRgvStatus(rgvTaskProtocol); + long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); + if (avoidAbs<51){ + return true; + } + rgvTaskProtocolOther.setAvoid(1); + rgvTaskProtocolOther.setAvoidingTheDestination(avoid); + RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther); return true; } - } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.ROAM)){ - if ((rgvProtocolOther.getRgvPosDestination()-rgvProtocolOther.getCarBodyJiaoMing()) - - (targetPosition+rgvProtocol.getCarBodyKunPeng()) - > avoidDistance){//鏃犻渶閬胯 + } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.ROAM)) { + if ((rgvProtocolOther.getRgvPosDestination() - rgvProtocolOther.getCarBodyJiaoMing()) + - (targetPosition + rgvProtocol.getCarBodyKunPeng()) + > avoidDistance) {//鏃犻渶閬胯 return true; } else { long avoid = targetPosition + rgvProtocol.getCarBodyKunPeng() + avoidDistance + rgvProtocolOther.getCarBodyJiaoMing(); - if (avoid > trackEntireLength-rgvProtocolOther.getCarBodyKunPeng()){ - log.error("閬胯瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); + if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) { + log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); return false; } - rgvTaskProtocol.setAvoid(1); - rgvTaskProtocol.setAvoidingTheDestination(avoid); - RgvTaskCache.updateRgvStatus(rgvTaskProtocol); + long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); + if (avoidAbs<51){ + return true; + } + rgvTaskProtocolOther.setAvoid(1); + rgvTaskProtocolOther.setAvoidingTheDestination(avoid); + RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther); return true; } - } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)){ - if ((rgvProtocolOther.getRgvPosDestination()-rgvProtocolOther.getCarBodyJiaoMing()) - - (targetPosition+rgvProtocol.getCarBodyKunPeng()) - > avoidDistance){//鏃犻渶閬胯 + } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)) { + if ((rgvProtocolOther.getRgvPosDestination() - rgvProtocolOther.getCarBodyJiaoMing()) + - (targetPosition + rgvProtocol.getCarBodyKunPeng()) + > avoidDistance) {//鏃犻渶閬胯 return true; } else { - RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvProtocolOther.getRgvNo()); - TaskProtocolCache taskProtocolCacheOther = rgvThreadOther.getTaskProtocolCache(); - List<TaskProtocol> allPutTaskProtocol = taskProtocolCacheOther.getAllPutTaskProtocol(); - if (allPutTaskProtocol.size() > 1){ - return false; - } - for (TaskProtocol taskProtocol : allPutTaskProtocol){ - if (taskProtocol.getTargetPosition()>=rgvProtocolOther.getRgvPos()){ - long avoid = rgvProtocolOther.getRgvPos()-rgvProtocolOther.getCarBodyJiaoMing()-avoidDistance-rgvProtocol.getCarBodyKunPeng(); - if (avoid > trackEntireLength-rgvProtocolOther.getCarBodyKunPeng()){ - log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); - return false; - } - rgvTaskProtocol.setAvoid(1); - rgvTaskProtocol.setAvoidingTheDestination(avoid); - RgvTaskCache.updateRgvStatus(rgvTaskProtocol); - return false; - } else { + 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); + rgvTaskProtocol.setAvoidingTheDestination(avoid); + RgvTaskCache.updateRgvStatus(rgvTaskProtocol); + return false; } return false; + } + } else { + if ((rgvProtocolOther.getRgvPosDestinationOrPos(true) - rgvProtocolOther.getCarBodyJiaoMing()) + - (targetPosition + rgvProtocol.getCarBodyKunPeng()) + > avoidDistance) {//鏃犻渶閬胯 + return true; } } } else { - if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)){ - if ((targetPosition-rgvProtocol.getCarBodyJiaoMing()) - - (rgvProtocolOther.getRgvPos()+rgvProtocolOther.getCarBodyKunPeng()) - > avoidDistance){//鏃犻渶閬胯 + if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)) { + if ((targetPosition - rgvProtocol.getCarBodyJiaoMing()) + - (rgvProtocolOther.getRgvPos() + rgvProtocolOther.getCarBodyKunPeng()) + > avoidDistance) {//鏃犻渶閬胯 return true; } else { - long avoid = targetPosition -rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng(); - if (avoid < trackBenchmark + rgvProtocolOther.getCarBodyJiaoMing()){ - log.error("閬胯瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); + long avoid = targetPosition - rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng(); + if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) { + log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); return false; } - rgvTaskProtocol.setAvoid(1); - rgvTaskProtocol.setAvoidingTheDestination(avoid); - RgvTaskCache.updateRgvStatus(rgvTaskProtocol); + long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); + if (avoidAbs<51){ + return true; + } + rgvTaskProtocolOther.setAvoid(1); + rgvTaskProtocolOther.setAvoidingTheDestination(avoid); + RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther); return true; } - } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.ROAM)){ - if ((targetPosition-rgvProtocol.getCarBodyJiaoMing()) - - (rgvProtocolOther.getRgvPosDestination()+rgvProtocolOther.getCarBodyKunPeng()) - > avoidDistance){//鏃犻渶閬胯 + } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.ROAM)) { + if ((targetPosition - rgvProtocol.getCarBodyJiaoMing()) + - (rgvProtocolOther.getRgvPosDestination() + rgvProtocolOther.getCarBodyKunPeng()) + > avoidDistance) {//鏃犻渶閬胯 return true; } else { - long avoid = targetPosition -rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng(); - if (avoid < trackBenchmark + rgvProtocolOther.getCarBodyJiaoMing()){ - log.error("閬胯瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); + long avoid = targetPosition - rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng(); + if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) { + log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); return false; } - rgvTaskProtocol.setAvoid(1); - rgvTaskProtocol.setAvoidingTheDestination(avoid); - RgvTaskCache.updateRgvStatus(rgvTaskProtocol); + long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); + if (avoidAbs<51){ + return true; + } + rgvTaskProtocolOther.setAvoid(1); + rgvTaskProtocolOther.setAvoidingTheDestination(avoid); + RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther); return true; } - } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)){ - if ((targetPosition-rgvProtocol.getCarBodyJiaoMing()) - - (rgvProtocolOther.getRgvPosDestination()+rgvProtocolOther.getCarBodyKunPeng()) - > avoidDistance){//鏃犻渶閬胯 + + } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)) { + if ((targetPosition - rgvProtocol.getCarBodyJiaoMing()) + - (rgvProtocolOther.getRgvPosDestination() + rgvProtocolOther.getCarBodyKunPeng()) + > avoidDistance) {//鏃犻渶閬胯 return true; } else { - RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvProtocolOther.getRgvNo()); - TaskProtocolCache taskProtocolCacheOther = rgvThreadOther.getTaskProtocolCache(); - List<TaskProtocol> allPutTaskProtocol = taskProtocolCacheOther.getAllPutTaskProtocol(); - if (allPutTaskProtocol.size() > 1){ - return false; - } - for (TaskProtocol taskProtocol : allPutTaskProtocol){ - if (taskProtocol.getTargetPosition()<=rgvProtocolOther.getRgvPos()){ - long avoid = rgvProtocolOther.getRgvPos()+rgvProtocolOther.getCarBodyKunPeng()+avoidDistance+rgvProtocol.getCarBodyJiaoMing(); - if (avoid < trackBenchmark + rgvProtocolOther.getCarBodyJiaoMing()){ - log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒"); - return false; - } - rgvTaskProtocol.setAvoid(1); - rgvTaskProtocol.setAvoidingTheDestination(avoid); - RgvTaskCache.updateRgvStatus(rgvTaskProtocol); - return false; - } else { + 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); + rgvTaskProtocol.setAvoidingTheDestination(avoid); + RgvTaskCache.updateRgvStatus(rgvTaskProtocol); + return false; } return false; + } + } else { + if ((rgvProtocolOther.getRgvPosDestinationOrPos(false) - rgvProtocolOther.getCarBodyJiaoMing()) + - (targetPosition + rgvProtocol.getCarBodyKunPeng()) + > avoidDistance) {//鏃犻渶閬胯 + return true; } } } @@ -368,25 +517,25 @@ rgvProtocol.setRgvNo(slave.getId()); } rgvProtocol.setMode((short) -1); - rgvProtocol.setStatus((short)-1); - rgvProtocol.setWalkPos((short)0); + rgvProtocol.setStatus((short) -1); + rgvProtocol.setWalkPos((short) 0); rgvProtocol.setRgvPos(0L); - rgvProtocol.setAlarm((short)0); + rgvProtocol.setAlarm((short) 0); rgvProtocol.setxSpeed((short) 0); rgvProtocol.setxDistance((short) 0); rgvProtocol.setxDuration((short) 0); rgvProtocol.setCarBodyJiaoMing(0L); rgvProtocol.setCarBodyKunPeng(0L); - try{ + try { BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class); BasRgv rgv = basRgvService.selectById(slave.getId()); - if (!Cools.isEmpty(rgv)){ + if (!Cools.isEmpty(rgv)) { rgvProtocol.setStatusEnable(rgv.getStatus() == 1); } else { rgvProtocol.setStatusEnable(false); } - } catch (Exception e){ - log.error("RGV寮傚父锛侊紒锛�"+e.getMessage()); + } catch (Exception e) { + log.error("RGV寮傚父锛侊紒锛�" + e.getMessage()); rgvProtocol.setStatusEnable(true); } @@ -395,7 +544,7 @@ rgvTaskProtocol = new RgvTaskProtocol(); rgvTaskProtocol.setRgvNo(slave.getId()); } - rgvTaskProtocol.setAvoid(-1); + rgvTaskProtocol.setAvoid(0); rgvTaskProtocol.setAvoidingTheDestination(0L); RgvStatusCache.updateRgvStatus(rgvProtocol); @@ -411,7 +560,7 @@ siemensNet.setRack(slave.getRack().byteValue()); siemensNet.setSlot(slave.getSlot().byteValue()); OperateResult connect = siemensNet.ConnectServer(); - if(connect.IsSuccess){ + if (connect.IsSuccess) { result = true; // 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.info("RGV plc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); @@ -428,25 +577,39 @@ /** * 璇诲彇鐘舵�� */ - private void readStatus(){ + private void readStatus() { try { - OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 34); + OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 19); if (result.IsSuccess) { // 鏋勫缓璁惧鐘舵�佸璞� RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); if (rgvProtocol == null) { rgvProtocol = new RgvProtocol(); - rgvProtocol.setRgvNo(slave.getId()); } - rgvProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0)); - rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 2)); - rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransUInt32(result.Content, 10)); - rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 20)); + 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)); + if (rgvProtocol.getRgvPosDestination()==0L){ + rgvProtocol.setRgvPosDestination(rgvProtocol.getRgvPos()); + } + rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 8)); + rgvProtocol.setTaskNo((long)siemensNet.getByteTransform().TransInt32(result.Content, 10)); + + rgvProtocol.setRgvNo((int)siemensNet.getByteTransform().TransInt16(result.Content, 14)); + rgvProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 16)); +// rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 20)); // rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 28)); // rgvProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 40)); // rgvProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 48)); - OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); +// OperateResultExOne<byte[]> result11 = siemensNet.Read("DB100.12", (short) 1); + boolean[] status = siemensNet.getByteTransform().TransBool(result.Content, 18, 1); + rgvProtocol.setLoaded(status[0]? (short)1:(short)0); + + OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), slave.getId())); // // 宸ヤ綅1澶嶄綅淇″彿 // if (rgvProtocol.getStatusType().equals(RgvStatusType.WAITING) // || rgvProtocol.getStatusType().equals(RgvStatusType.FETCHWAITING)) { @@ -463,18 +626,18 @@ // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴� BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class); BasRgv basRgv = basRgvService.selectById(slave.getId()); - if (!Cools.isEmpty(basRgv)){ + if (!Cools.isEmpty(basRgv)) { rgvProtocol.setStatusEnable(basRgv.getStatus() == 1); } else { rgvProtocol.setStatusEnable(false); } // BasRgv basRgv = new BasRgv(); basRgv.setRgvNo(slave.getId()); - basRgv.setRgvSts((int)rgvProtocol.getMode()); - if (!basRgvService.updateById(rgvProtocol.toSqlModel(basRgv))){ + basRgv.setRgvSts((int) rgvProtocol.getMode()); + if (!basRgvService.updateById(rgvProtocol.toSqlModel(basRgv))) { log.error("RGV plc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); } - } catch (Exception ignore){ + } catch (Exception ignore) { } @@ -484,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()); } @@ -506,13 +670,21 @@ // 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[1] = taskProtocol.getTaskNo(); // array[2] = taskProtocol.getTaskMode(); // array[4] = command.getDestinationStaNo(); // array[10] = taskProtocol.getCommand(); - OperateResult result = siemensNet.Write("DB100.0", taskProtocol.getTaskNo()); + int taskStatus = taskProtocol.getTaskStatus(); + OperateResult result = siemensNet.Write("DB100.0", taskProtocol.getTargetPosition().intValue()); + OperateResult result1 = siemensNet.Write("DB100.4", (short) taskStatus); + OperateResult result2 = siemensNet.Write("DB100.6", taskProtocol.getTaskNo().intValue()); + OperateResult result3 = siemensNet.Write("DB100.10", taskProtocol.isDirection()? (short) 1 : (short) 2); // 鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級 true:宸� false:鍙� + + OperateResult result4 = siemensNet.Write("DB100.12.0", true); // if (taskProtocol.getAckFinish1() == 0) { // short commandFinish = 3; //宸ヤ綅1銆�2浠诲姟鍚屾椂鍐欏叆 // Thread.sleep(100L); @@ -531,13 +703,14 @@ null, null, null, - result.IsSuccess? 1 : 0, + result.IsSuccess ? 1 : 0, null, new Date(), null ); bean.insert(basRgvOpt); - } catch (Exception ignore) {} + } catch (Exception ignore) { + } if (result != null && result.IsSuccess) { Thread.sleep(200); -- Gitblit v1.9.1