From 97aa2cd09e92f73cd4dff3d99eaef64e748c80b3 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期三, 28 六月 2023 19:04:32 +0800 Subject: [PATCH] 优化出库小车避让 --- src/main/java/com/zy/asrs/utils/Utils.java | 4 + src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 59 +++++++++-------------------- src/main/java/com/zy/core/thread/ShuttleThread.java | 18 +++++++- 3 files changed, 37 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java index 3cecf33..3d831aa 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -1086,26 +1086,6 @@ //鏈壘鍒拌矾寰勶紝绛夊緟涓嬩竴娆� continue; } - //鎵�浣跨敤鐨勮矾寰勮繘琛屼复鏃惰В閿侊紝鐢ㄤ簬鍚庣画璁$畻 - NavigateMapData navigateMapData = new NavigateMapData(currentLev); - navigateMapData.writeNavigateNodeToRedisMap(assignCommand.getNodes(), false);//鎵�浣跨敤鐨勮矾寰勮繘琛屼复鏃惰В閿� - - //浠诲姟鎵ц瀹屽悗锛屽皬杞﹁繘鍏ョЩ寮�鎻愬崌鏈哄彛绔欑偣浣嶇疆锛屼互鍏嶅潬钀� - //鎼滅储涓�鏉℃病鏈夊皬杞︾殑绌哄贩閬擄紝骞惰皟搴﹀皬杞� - int distLev = Utils.getLev(liftSiteLocNo);//閬胯妤煎眰 - String startLocNo = "180020" + Utils.getLev(liftSiteLocNo); - ShuttleAssignCommand moveAssignCommand = Utils.searchEmptyGroupToMoveShuttle(distLev, shuttleThread.getSlave().getId(), shuttleThread, startLocNo); - if (moveAssignCommand == null) {//璋冨害灏忚溅鍛戒护涓虹┖ - continue; - } - //鎵�浣跨敤鐨勮矾寰勮繘琛屼复鏃惰В閿侊紝鐢ㄤ簬鍚庣画璁$畻 - navigateMapData.writeNavigateNodeToRedisMap(moveAssignCommand.getNodes(), false);//鎵�浣跨敤鐨勮矾寰勮繘琛屼复鏃惰В閿� - commands.addAll(moveAssignCommand.getCommands());//灏嗛伩璁╁皬杞︾殑鍛戒护娣诲姞 - List<NavigateNode> nodes = assignCommand.getNodes();//灏嗛伩璁╄矾寰勬坊鍔犺繘鑺傜偣璺緞涓� - nodes.addAll(moveAssignCommand.getNodes());//灏嗛伩璁╄矾寰勬坊鍔犺繘鑺傜偣璺緞涓� - assignCommand.setNodes(nodes); - navigateMapData.writeNavigateNodeToRedisMap(nodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹� - //鍒嗛厤鐩爣搴撲綅 shuttleProtocol.setLocNo(wrkMast.getSourceLocNo()); @@ -1177,26 +1157,6 @@ if (commands == null) { continue;//鏈壘鍒拌矾寰� } - //鎵�浣跨敤鐨勮矾寰勮繘琛屼复鏃惰В閿侊紝鐢ㄤ簬鍚庣画璁$畻 - NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(liftSiteLocNo)); - navigateMapData.writeNavigateNodeToRedisMap(assignCommand.getNodes(), false);//鎵�浣跨敤鐨勮矾寰勮繘琛屼复鏃惰В閿� - - //浠诲姟鎵ц瀹屽悗锛屽皬杞﹁繘鍏ョЩ寮�鎻愬崌鏈哄彛绔欑偣浣嶇疆锛屼互鍏嶅潬钀� - //鎼滅储涓�鏉℃病鏈夊皬杞︾殑绌哄贩閬擄紝骞惰皟搴﹀皬杞� - int distLev = Utils.getLev(liftSiteLocNo);//閬胯妤煎眰 - String startLocNo = "180020" + Utils.getLev(liftSiteLocNo); - ShuttleAssignCommand moveAssignCommand = Utils.searchEmptyGroupToMoveShuttle(distLev, shuttleThread.getSlave().getId(), shuttleThread, startLocNo); - if (moveAssignCommand == null) {//璋冨害灏忚溅鍛戒护涓虹┖ - continue; - } - //鎵�浣跨敤鐨勮矾寰勮繘琛屼复鏃惰В閿侊紝鐢ㄤ簬鍚庣画璁$畻 - navigateMapData.writeNavigateNodeToRedisMap(moveAssignCommand.getNodes(), false);//鎵�浣跨敤鐨勮矾寰勮繘琛屼复鏃惰В閿� - commands.addAll(moveAssignCommand.getCommands());//灏嗛伩璁╁皬杞︾殑鍛戒护娣诲姞 - List<NavigateNode> nodes = assignCommand.getNodes();//灏嗛伩璁╄矾寰勬坊鍔犺繘鑺傜偣璺緞涓� - nodes.addAll(moveAssignCommand.getNodes());//灏嗛伩璁╄矾寰勬坊鍔犺繘鑺傜偣璺緞涓� - assignCommand.setNodes(nodes); - navigateMapData.writeNavigateNodeToRedisMap(nodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹� - //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝闇�瑕佸涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛 short startCode = liftProtocol.getBarcode();//鎻愬崌鏈哄唴閮ㄤ簩缁寸爜 @@ -1373,6 +1333,7 @@ //灏嗕换鍔℃。鏍囪涓哄畬鎴� WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo().intValue()); + ShuttleAssignCommand moveAssignCommand = null;//閬胯鍛戒护 if (wrkMast != null) { switch (wrkMast.getWrkSts().intValue()) { case 9://9.灏忚溅鍏ュ簱鎼繍涓� ==> 14.鍏ュ簱瀹屾垚 @@ -1385,6 +1346,15 @@ wrkMast.setWrkSts(23L); break; case 26://26.灏忚溅鍑哄簱鎼繍涓� ==> 27.灏忚溅鍑哄簱鎼繍瀹屾垚 + //浠诲姟鎵ц瀹屽悗锛屽皬杞﹁繘鍏ョЩ寮�鎻愬崌鏈哄彛绔欑偣浣嶇疆锛屼互鍏嶅潬钀� + //鎼滅储涓�鏉℃病鏈夊皬杞︾殑绌哄贩閬擄紝骞惰皟搴﹀皬杞� + int distLev = Utils.getLev(wrkMast.getSourceLocNo());//閬胯妤煎眰 + String startLocNo = "180020" + distLev; + moveAssignCommand = Utils.searchEmptyGroupToMoveShuttle(distLev, shuttleThread.getSlave().getId(), shuttleThread, startLocNo); + if (moveAssignCommand == null) {//璋冨害灏忚溅鍛戒护涓虹┖ + continue; + } + wrkMast.setWrkSts(27L); break; default: @@ -1402,6 +1372,15 @@ //浠诲姟鎸囦护娓呴浂 shuttleProtocol.setAssignCommand(null); News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo()); + + if (wrkMast.getWrkSts() == 27) { + if (moveAssignCommand != null) { + //涓嬪彂浠诲姟 + shuttleProtocol.setPakMk(true); + MessageQueue.offer(SlaveType.Shuttle, shuttleThread.getSlave().getId(), new Task(3, moveAssignCommand)); + } + } + } else { News.error("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傚洓鍚戠┛姊溅鍙�={}锛屽伐浣滃彿={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo()); } diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java index 89e907d..d862cba 100644 --- a/src/main/java/com/zy/asrs/utils/Utils.java +++ b/src/main/java/com/zy/asrs/utils/Utils.java @@ -9,6 +9,7 @@ import com.zy.asrs.service.impl.MainServiceImpl; import com.zy.common.model.NavigateNode; import com.zy.common.model.enums.NavigationMapType; +import com.zy.common.service.CommonService; import com.zy.common.utils.NavigateMapData; import com.zy.common.utils.NavigatePositionConvert; import com.zy.common.utils.NavigateUtils; @@ -525,6 +526,7 @@ public static ShuttleAssignCommand searchEmptyGroupToMoveShuttle(int z, Integer currentShuttleId, ShuttleThread shuttleThread, String startLocNo) { LocMastService locMastService = SpringUtils.getBean(LocMastService.class); MainServiceImpl mainServiceImpl = SpringUtils.getBean(MainServiceImpl.class); + CommonService commonService = SpringUtils.getBean(CommonService.class); if (shuttleThread == null) { return null; @@ -579,7 +581,7 @@ //鍒涘缓鍒嗛厤鍛戒护 ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 - assignCommand.setTaskNo((short) 9998);//浠诲姟鍙� + assignCommand.setTaskNo((short) commonService.getWorkNo(7));//浠诲姟鍙� assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id.shortValue());//绉诲姩鍒扮洰鏍囧簱浣� assignCommand.setSourceLocNo(startLocNo);//婧愬簱浣� diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java index d6b95ac..88b5ab8 100644 --- a/src/main/java/com/zy/core/thread/ShuttleThread.java +++ b/src/main/java/com/zy/core/thread/ShuttleThread.java @@ -729,6 +729,9 @@ // } // } + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands(); //褰撳墠姝ュ簭 int commandStep = redisCommand.getCommandStep(); @@ -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) { //鎵樼洏椤跺崌鍛戒护 @@ -805,9 +816,6 @@ } } - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); - LiftProtocol liftProtocol = liftThread.getLiftProtocol(); - //鍒ゆ柇灏忚溅褰撳墠浜岀淮鐮佹槸鍚︿负鎻愬崌鏈轰簩缁寸爜 if (shuttleProtocol.getCurrentCode().intValue() == liftProtocol.getBarcode().intValue()) { @@ -844,6 +852,9 @@ if (!staProtocol.isLiftArrival()) { return false;//绔欑偣鎻愬崌鏈哄埌浣嶄俊鍙穎alse锛岀姝笅鍙戝懡浠� } + + //鏉′欢婊¤冻锛屽崰鐢ㄦ彁鍗囨満 + liftProtocol.setTaskNo(wrkNo); } } @@ -1046,6 +1057,7 @@ return true; }else { if (liftProtocol.getPositionArrivalFeedback$() == shuttleLocNoLev) { + liftProtocol.setTaskNo(wrkNo);//缁欐彁鍗囨満鍐欏伐浣滃彿锛岄槻姝㈣鍗犵敤 return true;//鎻愬崌鏈哄埌浣� } executeLift(liftThread, liftProtocol, redisCommand, shuttleLocNoLev);//璋冨害鎻愬崌鏈� -- Gitblit v1.9.1