From 1edc46cc37adb14e30c80c22491d770bfe9214d1 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期四, 29 六月 2023 11:35:59 +0800 Subject: [PATCH] 优化寻车,出库问题 --- src/main/java/com/zy/core/thread/ShuttleThread.java | 199 +++++++++++++++++++++++++++---------------------- 1 files changed, 110 insertions(+), 89 deletions(-) diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java index 7d23d51..029180e 100644 --- a/src/main/java/com/zy/core/thread/ShuttleThread.java +++ b/src/main/java/com/zy/core/thread/ShuttleThread.java @@ -423,9 +423,9 @@ //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞 //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护 LocMast currentLocMast = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString()); - List<NavigateNode> firstMastResult = NavigateUtils.calc(currentLocMast.getLocNo(), assignCommand.getSourceLocNo(), NavigationMapType.NORMAL.id);//灏忚溅鍒颁腑鐐癸紝澶勪簬鏃犺揣鐘舵�侊紝浣跨敤姝e父閫氶亾鍦板浘 - - if (firstMastResult != null) { + List<NavigateNode> firstMastResult = NavigateUtils.calc(currentLocMast.getLocNo(), assignCommand.getSourceLocNo(), NavigationMapType.NORMAL.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(currentLocMast.getLocNo())));//灏忚溅鍒颁腑鐐癸紝澶勪簬鏃犺揣鐘舵�侊紝浣跨敤姝e父閫氶亾鍦板浘 + boolean checkResult = Utils.checkShuttlePath(firstMastResult, shuttleProtocol.getShuttleNo().intValue()); + if (firstMastResult != null && checkResult) { allNode.addAll(firstMastResult);//灏嗚妭鐐硅繘琛屼繚瀛� //鑾峰彇鍒嗘璺緞 ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(firstMastResult); @@ -459,9 +459,9 @@ } //璁$畻涓偣鍒扮粓鐐硅矾寰� - List<NavigateNode> secMastResult = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getLocNo(), NavigationMapType.DFX.id);//灏忚溅浠庝腑鐐瑰埌缁堢偣锛屽浜庢湁璐х姸鎬侊紝浣跨敤DFX鍦板浘 - - if (secMastResult != null) { + List<NavigateNode> secMastResult = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getLocNo(), NavigationMapType.DFX.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(assignCommand.getSourceLocNo())));//灏忚溅浠庝腑鐐瑰埌缁堢偣锛屽浜庢湁璐х姸鎬侊紝浣跨敤DFX鍦板浘 + boolean checkResult2 = Utils.checkShuttlePath(secMastResult, shuttleProtocol.getShuttleNo().intValue()); + if (secMastResult != null && checkResult2) { allNode.addAll(secMastResult);//灏嗚妭鐐硅繘琛屼繚瀛� //鑾峰彇鍒嗘璺緞 ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(secMastResult); @@ -544,9 +544,9 @@ } LocMast locMast = locMastService.queryByQrCode(startQr); - List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), assignCommand.getLocNo(), NavigationMapType.NONE.id);//鎵嬪姩鍛戒护-绉诲姩鍛戒护锛屼娇鐢ㄦ棤杩囨护鍦板浘 - - if (result != null) { + List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), assignCommand.getLocNo(), NavigationMapType.NONE.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(locMast.getLocNo())));//鎵嬪姩鍛戒护-绉诲姩鍛戒护锛屼娇鐢ㄦ棤杩囨护鍦板浘 + boolean checkResult3 = Utils.checkShuttlePath(result, shuttleProtocol.getShuttleNo().intValue()); + if (result != null && checkResult3) { //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� navigateMapData = new NavigateMapData(Utils.getLev(locMast.getLocNo())); navigateMapData.writeNavigateNodeToRedisMap(result, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� @@ -580,10 +580,10 @@ int lev = Utils.getLev(locMast1.getLocNo());//绌挎杞﹀綋鍓嶉珮搴� String liftSiteLocNo = Utils.levToOutInStaLocNo(lev);//褰撳墠妤煎眰绔欑偣搴撲綅鍙� LocMast liftSitelocMast = locMastService.selectById(liftSiteLocNo); - List<NavigateNode> result1 = NavigateUtils.calc(locMast1.getLocNo(), liftSiteLocNo, NavigationMapType.NONE.id);//绉诲姩鍒版彁鍗囨満锛屼娇鐢ㄦ棤杩囨护鍦板浘 - + List<NavigateNode> result1 = NavigateUtils.calc(locMast1.getLocNo(), liftSiteLocNo, NavigationMapType.NONE.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(locMast1.getLocNo())));//绉诲姩鍒版彁鍗囨満锛屼娇鐢ㄦ棤杩囨护鍦板浘 + boolean checkResult4 = Utils.checkShuttlePath(result1, shuttleProtocol.getShuttleNo().intValue()); Short endStartCode = null; - if (result1 != null) { + if (result1 != null && checkResult4) { //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� navigateMapData = new NavigateMapData(Utils.getLev(locMast1.getLocNo())); navigateMapData.writeNavigateNodeToRedisMap(result1, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� @@ -656,78 +656,81 @@ return false; } - List<ShuttleCommand> errorCommands = redisCommand.getErrorCommands(); - if (errorCommands.size() > 0) { - //浼樺厛鎵ц璇ユ寚浠� - ShuttleCommand errorCommand = errorCommands.get(0);//鍙栧嚭鎸囦护 +// List<ShuttleCommand> errorCommands = redisCommand.getErrorCommands(); +// if (errorCommands.size() > 0) { +// //浼樺厛鎵ц璇ユ寚浠� +// ShuttleCommand errorCommand = errorCommands.get(0);//鍙栧嚭鎸囦护 +// +// if(errorCommand.getCommandWord() == 1){//姝e父琛岃蛋鍛戒护锛岄渶瑕佸厛鎵ц瀹屾壘搴撲綅鍛戒护鍚庯紝鍐嶆墽琛� +// LocMastService locMastService = SpringUtils.getBean(LocMastService.class); +// LocMast locMast = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString()); +// LocMast distLocMast = locMastService.queryByQrCode(errorCommand.getStartCodeNum().toString()); +// if (shuttleProtocol.getCurrentCode().equals(errorCommand.getStartCodeNum())) { +// //璧风偣鍜岀粓鐐瑰睘浜庡悓涓�搴撲綅锛屾棤闇�鍐嶆墽琛岀Щ鍔ㄦ搷浣� +// errorCommands.remove(0);//绉婚櫎璇ュ懡浠� +// redisCommand.setErrorCommands(new ArrayList<ShuttleCommand>()); +// shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING); +// //褰撳墠姝ュ簭 +// int commandStep = redisCommand.getCommandStep(); +// //姝ュ簭鍥為�� +// commandStep--; +// redisCommand.setCommandStep(commandStep); +// //浠诲姟鏁版嵁淇濆瓨鍒皉edis +// redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand)); +// shuttleProtocol.setPakMk(true); +// return true; +// }else { +// List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), distLocMast.getLocNo(), NavigationMapType.DFX.id, Utils.getShuttlePoints(errorCommand.getShuttleNo().intValue()));//閿欒鎭㈠锛屼娇鐢―FX鍦板浘 +// if (result != null) { +// //鑾峰彇鍒嗘璺緞 +// ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(result); +// //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 +// for (ArrayList<NavigateNode> nodes : data) { +// //寮�濮嬭矾寰� +// NavigateNode startPath = nodes.get(0); +// //鐩爣璺緞 +// NavigateNode endPath = nodes.get(nodes.size() - 1); +// Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� +// +// String qrCodeValue = distLocMast.getQrCodeValue(); +// errorCommand.setCommandWord((short) 1); +// errorCommand.setStartCodeNum(shuttleProtocol.getCurrentCode()); +// errorCommand.setMiddleCodeNum((short) 1); +// errorCommand.setDistCodeNum((short) Integer.parseInt(qrCodeValue)); +// errorCommand.setStartToDistDistance(allDistance); +// errorCommand.setRunSpeed((short) 1000); +// errorCommand.setRunDirection(ShuttleRunDirection.get(startPath.getDirection()).id); +// errorCommand.setForceMoveDistance(0); +// errorCommand.setIOControl((short) 0); +// errorCommand.setCommandEnd((short) 1); +// break; +// } +// } +// } +// +// shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING); +// //褰撳墠姝ュ簭 +// int commandStep = redisCommand.getCommandStep(); +// //姝ュ簭鍥為�� +// commandStep--; +// redisCommand.setCommandStep(commandStep); +// } +// +// if (!write(errorCommand)) { +// News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(errorCommand)); +// return false; +// } else { +// News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(errorCommand)); +// errorCommands.remove(0); +// redisCommand.setErrorCommands(errorCommands); +// //浠诲姟鏁版嵁淇濆瓨鍒皉edis +// redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand)); +// return true; +// } +// } - if(errorCommand.getCommandWord() == 1){//姝e父琛岃蛋鍛戒护锛岄渶瑕佸厛鎵ц瀹屾壘搴撲綅鍛戒护鍚庯紝鍐嶆墽琛� - LocMastService locMastService = SpringUtils.getBean(LocMastService.class); - LocMast locMast = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString()); - LocMast distLocMast = locMastService.queryByQrCode(errorCommand.getStartCodeNum().toString()); - if (shuttleProtocol.getCurrentCode().equals(errorCommand.getStartCodeNum())) { - //璧风偣鍜岀粓鐐瑰睘浜庡悓涓�搴撲綅锛屾棤闇�鍐嶆墽琛岀Щ鍔ㄦ搷浣� - errorCommands.remove(0);//绉婚櫎璇ュ懡浠� - redisCommand.setErrorCommands(new ArrayList<ShuttleCommand>()); - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING); - //褰撳墠姝ュ簭 - int commandStep = redisCommand.getCommandStep(); - //姝ュ簭鍥為�� - commandStep--; - redisCommand.setCommandStep(commandStep); - //浠诲姟鏁版嵁淇濆瓨鍒皉edis - redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand)); - shuttleProtocol.setPakMk(true); - return true; - }else { - List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), distLocMast.getLocNo(), NavigationMapType.DFX.id);//閿欒鎭㈠锛屼娇鐢―FX鍦板浘 - if (result != null) { - //鑾峰彇鍒嗘璺緞 - ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(result); - //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 - for (ArrayList<NavigateNode> nodes : data) { - //寮�濮嬭矾寰� - NavigateNode startPath = nodes.get(0); - //鐩爣璺緞 - NavigateNode endPath = nodes.get(nodes.size() - 1); - Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - - String qrCodeValue = distLocMast.getQrCodeValue(); - errorCommand.setCommandWord((short) 1); - errorCommand.setStartCodeNum(shuttleProtocol.getCurrentCode()); - errorCommand.setMiddleCodeNum((short) 1); - errorCommand.setDistCodeNum((short) Integer.parseInt(qrCodeValue)); - errorCommand.setStartToDistDistance(allDistance); - errorCommand.setRunSpeed((short) 1000); - errorCommand.setRunDirection(ShuttleRunDirection.get(startPath.getDirection()).id); - errorCommand.setForceMoveDistance(0); - errorCommand.setIOControl((short) 0); - errorCommand.setCommandEnd((short) 1); - break; - } - } - } - - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING); - //褰撳墠姝ュ簭 - int commandStep = redisCommand.getCommandStep(); - //姝ュ簭鍥為�� - commandStep--; - redisCommand.setCommandStep(commandStep); - } - - if (!write(errorCommand)) { - News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(errorCommand)); - return false; - } else { - News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(errorCommand)); - errorCommands.remove(0); - redisCommand.setErrorCommands(errorCommands); - //浠诲姟鏁版嵁淇濆瓨鍒皉edis - redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand)); - return true; - } - } + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands(); //褰撳墠姝ュ簭 @@ -744,6 +747,14 @@ if (command.getDistCodeNum().intValue() == shuttleProtocol.getCurrentCode().intValue()) { //涓婁竴鏉℃寚浠ょ殑鐩爣浣嶇疆鍜屽綋鍓嶅皬杞︿綅缃浉鍚岋紝鍒欒瀹氫笂涓�鏉′换鍔″畬鎴� command.setComplete(true); + + //涓婁竴鏉℃寚浠よ捣鐐规槸鎻愬崌鏈轰簩缁寸爜锛屽垯娓呴浂鎻愬崌鏈轰换鍔″彿 + if (command.getStartCodeNum().intValue() == liftProtocol.getBarcode().intValue()) { + //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庣┖闂� + if (liftProtocol.isIdleNoTask()) { + liftProtocol.setTaskNo((short) 0);//娓呯┖浠诲姟鍙� + } + } } } else if (command.getCommandWord().intValue() == 2) { //鎵樼洏椤跺崌鍛戒护 @@ -793,6 +804,10 @@ } } + if (commands.size() == 0) { + return false; + } + //鍙栧嚭鍛戒护 ShuttleCommand command = commands.get(commandStep); @@ -805,9 +820,6 @@ } } - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); - LiftProtocol liftProtocol = liftThread.getLiftProtocol(); - //鍒ゆ柇灏忚溅褰撳墠浜岀淮鐮佹槸鍚︿负鎻愬崌鏈轰簩缁寸爜 if (shuttleProtocol.getCurrentCode().intValue() == liftProtocol.getBarcode().intValue()) { @@ -817,7 +829,7 @@ if (!liftProtocol.isIdleNoTask()) { return false;//鎻愬崌鏈哄繖锛岀姝笅鍙戝懡浠� } - if (liftProtocol.getTaskNo().intValue() != wrkNo) { + if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkNo) { //鎻愬崌鏈哄伐浣滃彿鍜屽綋鍓嶅伐浣滀笉鐩稿悓锛岀姝笅鍙戝懡浠� return false; } @@ -844,6 +856,9 @@ if (!staProtocol.isLiftArrival()) { return false;//绔欑偣鎻愬崌鏈哄埌浣嶄俊鍙穎alse锛岀姝笅鍙戝懡浠� } + + //鏉′欢婊¤冻锛屽崰鐢ㄦ彁鍗囨満 + liftProtocol.setTaskNo(wrkNo); } } @@ -1046,6 +1061,7 @@ return true; }else { if (liftProtocol.getPositionArrivalFeedback$() == shuttleLocNoLev) { + liftProtocol.setTaskNo(wrkNo);//缁欐彁鍗囨満鍐欏伐浣滃彿锛岄槻姝㈣鍗犵敤 return true;//鎻愬崌鏈哄埌浣� } executeLift(liftThread, liftProtocol, redisCommand, shuttleLocNoLev);//璋冨害鎻愬崌鏈� @@ -1057,8 +1073,13 @@ } private boolean executeLift(LiftThread liftThread, LiftProtocol liftProtocol, ShuttleRedisCommand redisCommand, Integer shuttleLocNoLev) {//璋冨害鎻愬崌鏈� - if (liftProtocol.getRunning()) { - //鎻愬崌鏈鸿繍琛屼腑锛岀姝笅鍙� + if (!liftProtocol.isIdle()) { + //鎻愬崌鏈轰笉绌洪棽绂佹涓嬪彂 + return false; + } + + if (liftProtocol.getPlatShuttleCheck()) { + //鎻愬崌鏈哄唴鏈夎溅绂佹涓嬪彂 return false; } -- Gitblit v1.9.1