From 928bc386bea03b9d3157e6d66dcb7afc843e9964 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期六, 17 六月 2023 15:55:50 +0800 Subject: [PATCH] 小车从提升机移动出去增强管控 --- src/main/java/com/zy/core/thread/LiftThread.java | 10 + src/main/java/com/zy/asrs/utils/Utils.java | 20 ++ src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 318 ++++++++++++++++++++++++++++---------- src/main/java/com/zy/core/thread/ShuttleThread.java | 50 +++++ src/main/java/com/zy/common/utils/NavigateUtils.java | 13 + src/main/java/com/zy/core/model/protocol/LiftProtocol.java | 39 ++++ 6 files changed, 356 insertions(+), 94 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 bbca4a3..4ed63d7 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -670,12 +670,40 @@ if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 8) { ShuttleThread shuttleThread = null; HashMap<String, Object> searchIdleShuttle = null; + + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (wrkMast.getWrkSts() == 4) { //瀵绘壘鏈�杩戜笖绌洪棽鐨勫洓鍚戠┛姊溅 searchIdleShuttle = this.searchIdleShuttle(wrkMast); shuttleThread = (ShuttleThread) searchIdleShuttle.get("result"); - }else { - //鐘舵��8锛屽洓鍚戠┛姊溅宸插湪鎻愬崌鏈哄彛锛岀瓑寰呭懡浠よ繘琛屽叆搴撴惉杩愬姩浣� + }else if(wrkMast.getWrkSts() == 8){//鐘舵��8锛岄渶瑕佸悜灏忚溅涓嬪彂鍛戒护浠庢彁鍗囨満绉诲姩鍑哄幓锛岄渶瑕佸垽鏂彁鍗囨満鐘舵槸鍚︾┖闂层�佹彁鍗囨満鏄惁鍒拌揪鐩爣妤煎眰銆佺洰鏍囨ゼ灞傜珯鐐规槸鍚﹀瓨鍦ㄣ�佺洰鏍囨ゼ灞傜珯鐐规槸鍚︾粰鍑烘彁鍗囨満鍒颁綅淇″彿 + //鐘舵��8锛岀瓑寰呭懡浠よ繘琛屽叆搴撴惉杩愬姩浣� + + //鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂� + if (!liftProtocol.isIdle()) { + continue;//鎻愬崌鏈哄繖 + } + + //鍒ゆ柇鎻愬崌鏈烘ゼ灞傛槸鍚﹀埌浣嶏紝鍒ゆ柇绔欑偣鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙� + String locNo = wrkMast.getLocNo(); + int lev = Utils.getLev(locNo);//鐩爣浜岀淮鐮佹墍鍦ㄦゼ灞� + int liftLev = liftProtocol.getLev().intValue();//鎻愬崌鏈烘墍鍦ㄦゼ灞� + if (liftLev != lev) { + continue;//鎻愬崌鏈轰笉鍦ㄧ洰鏍囨ゼ灞傝烦杩� + } + + Integer staNo = Utils.levToOutInStaNo(lev); + //鑾峰彇鐩爣绔欎俊鎭� + StaProtocol staProtocol1 = devpThread.getStation().get(staNo); + if (staProtocol1 == null) { + continue;//绔欑偣淇℃伅涓嶅瓨鍦� + } + if (!staProtocol1.isLiftArrival()) { + continue;//绔欑偣鎻愬崌鏈哄埌浣嶄俊鍙穎alse + } + Integer shuttleNo = wrkMast.getShuttleNo();//鍥涘悜绌挎杞﹀彿 shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo); } @@ -705,7 +733,7 @@ assignCommand.setSourceLocNo(currentLocNo);//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) String locNo = wrkMast.getLocNo();//褰撳墠宸ヤ綔妗e簱浣嶅彿 - Integer currentLev = Utils.getLev(currentLocNo);//灏忚溅褰撳墠灞傞珮 + Integer currentLev = wrkMast.getWrkSts() == 4 ? Utils.getLev(currentLocNo) : liftProtocol.getLev();//灏忚溅褰撳墠灞傞珮 //鎻愬崌鏈哄彛绔欑偣搴撲綅鍙� String liftSiteLocNo = Utils.levToOutInStaLocNo(currentLev); @@ -713,15 +741,17 @@ if (wrkMast.getWrkSts() == 8 || Boolean.parseBoolean(searchIdleShuttle.get("sameLay").toString())) { //鍚屼竴灞傜洿鎺ュ彇璐ф棤闇�缁忚繃鎻愬崌鏈� //鐩存帴璁$畻杞﹀埌鎻愬崌鏈哄彇璐у啀鍒板簱浣嶈矾寰勬寚浠� - List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftSiteLocNo, locNo, assignCommand,shuttleThread); + List<ShuttleCommand> commands = this.shuttleAssignCommand(wrkMast.getWrkSts() == 4 ? currentLocNo : liftSiteLocNo, liftSiteLocNo, locNo, assignCommand, shuttleThread); if (wrkMast.getWrkSts() == 8) { - //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝闇�瑕佸涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛 - BasDevp basDevp = basDevpService.selectById(109);//鑾峰彇鎻愬崌鏈轰俊鎭� - short startCode = Short.parseShort(basDevp.getQrCodeValue());//鎻愬崌鏈哄唴閮ㄤ簩缁寸爜 - Short distCode = commands.get(0).getStartCodeNum();//鎻愬崌鏈哄彛浜岀淮鐮� - Short runDirection = commands.get(0).getRunDirection();//杩愯鏂瑰悜 + //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛 + Integer staNo = Utils.levToOutInStaNo(currentLev);//绔欑偣鍙� + BasDevp basDevp = basDevpService.selectById(staNo); + + short startCode = liftProtocol.getBarcode();//鎻愬崌鏈哄唴閮ㄤ簩缁寸爜 + Short distCode = Short.parseShort(basDevp.getQrCodeValue());//鎻愬崌鏈哄彛绔欑偣浜岀淮鐮� + Short runDirection = ShuttleRunDirection.BOTTOM.id;//杩愯鏂瑰悜 //鑾峰彇鍛戒护 - ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCode, distCode, 1300, runDirection, (short) 1, 0); + ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCode, distCode, 1400, runDirection, startCode, 1400, 1000); commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶� } assignCommand.setCommands(commands); @@ -735,6 +765,15 @@ //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞 List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftSiteLocNo, ShuttleTaskModeType.PAK_IN.id, assignCommand, shuttleThread); + + //鑾峰彇褰撳墠灏忚溅鎵�鍦ㄦゼ灞傜殑绔欑偣淇℃伅 + BasDevp basDevp = basDevpService.queryByLocNo(liftSiteLocNo); + Short endStartCode = Short.parseShort(basDevp.getQrCodeValue());//绔欑偣浜岀淮鐮� + + //澧炲姞绉诲姩杩涙彁鍗囨満鍛戒护 + ShuttleCommand moveCommand = shuttleThread.getMoveCommand(endStartCode, liftProtocol.getBarcode(), 1400, ShuttleRunDirection.TOP.id, endStartCode, 1400, 1000); + commands.add(moveCommand); + //鍒嗛厤鐩爣搴撲綅 shuttleProtocol.setLocNo(liftSiteLocNo); //鐩爣搴撲綅 @@ -923,11 +962,43 @@ || wrkMast.getWrkSts() == 31) { ShuttleThread shuttleThread = null; HashMap<String, Object> searchIdleShuttle = null; + + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (wrkMast.getWrkSts() == 21) { //瀵绘壘鏈�杩戜笖绌洪棽鐨勫洓鍚戠┛姊溅 searchIdleShuttle = this.searchIdleShuttle(wrkMast); shuttleThread = (ShuttleThread) searchIdleShuttle.get("result"); - }else if(wrkMast.getWrkSts() == 31 || wrkMast.getWrkSts() == 25) { + }else if(wrkMast.getWrkSts() == 25) {//鐘舵��25锛岄渶瑕佸悜灏忚溅涓嬪彂鍛戒护浠庢彁鍗囨満绉诲姩鍑哄幓锛岄渶瑕佸垽鏂彁鍗囨満鐘舵槸鍚︾┖闂层�佹彁鍗囨満鏄惁鍒拌揪鐩爣妤煎眰銆佺洰鏍囨ゼ灞傜珯鐐规槸鍚﹀瓨鍦ㄣ�佺洰鏍囨ゼ灞傜珯鐐规槸鍚︾粰鍑烘彁鍗囨満鍒颁綅淇″彿 + + //鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂� + if (!liftProtocol.isIdle()) { + continue;//鎻愬崌鏈哄繖 + } + + //鍒ゆ柇鎻愬崌鏈烘ゼ灞傛槸鍚﹀埌浣嶏紝鍒ゆ柇绔欑偣鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙� + String locNo = wrkMast.getSourceLocNo(); + int lev = Utils.getLev(locNo);//鐩爣浜岀淮鐮佹墍鍦ㄦゼ灞� + int liftLev = liftProtocol.getLev().intValue();//鎻愬崌鏈烘墍鍦ㄦゼ灞� + if (liftLev != lev) { + continue;//鎻愬崌鏈轰笉鍦ㄧ洰鏍囨ゼ灞傝烦杩� + } + + Integer staNo = Utils.levToOutInStaNo(lev); + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); + //鑾峰彇鐩爣绔欎俊鎭� + StaProtocol staProtocol1 = devpThread.getStation().get(staNo); + if (staProtocol1 == null) { + continue;//绔欑偣淇℃伅涓嶅瓨鍦� + } + if (!staProtocol1.isLiftArrival()) { + continue;//绔欑偣鎻愬崌鏈哄埌浣嶄俊鍙穎alse + } + + //缁х画瀹屾垚涔嬪墠灏忚溅鏈畬鎴愮殑浠诲姟 + shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + } else if (wrkMast.getWrkSts() == 31) { //缁х画瀹屾垚涔嬪墠灏忚溅鏈畬鎴愮殑浠诲姟 shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); } @@ -995,6 +1066,15 @@ //灏忚溅鍒版彁鍗囨満鍙f寚浠� List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftSiteLocNo, ShuttleTaskModeType.PAK_IN.id, assignCommand, shuttleThread); shuttleProtocol.setLocNo(liftSiteLocNo); + + //鑾峰彇褰撳墠灏忚溅鎵�鍦ㄦゼ灞傜殑绔欑偣淇℃伅 + BasDevp basDevp = basDevpService.queryByLocNo(liftSiteLocNo); + Short endStartCode = Short.parseShort(basDevp.getQrCodeValue());//绔欑偣浜岀淮鐮� + + //澧炲姞绉诲姩杩涙彁鍗囨満鍛戒护 + ShuttleCommand moveCommand = shuttleThread.getMoveCommand(endStartCode, liftProtocol.getBarcode(), 1400, ShuttleRunDirection.TOP.id, endStartCode, 1400, 1000); + commands.add(moveCommand); + //鐩爣搴撲綅 assignCommand.setLocNo(liftSiteLocNo); assignCommand.setCommands(commands); @@ -1032,10 +1112,13 @@ */ public HashMap<String,Object> searchIdleShuttle(WrkMast wrkMast) { HashMap<String, Object> map = new HashMap<>(); - String locNo = wrkMast.getWrkSts() < 10 ? wrkMast.getLocNo() : wrkMast.getSourceLocNo();//搴撲綅鍙� + String locNo = wrkMast.getIoType() < 101 ? wrkMast.getLocNo() : wrkMast.getSourceLocNo();//搴撲綅鍙� LocMast locMast = locMastService.queryByLoc(locNo);//鎵惧埌搴撲綅璁板綍 int lev = Utils.getLev(locNo);//褰撳墠宸ヤ綔妗e簱浣嶅眰楂� ShuttleThread recentShuttle = null;//褰撳墠璺濈鏈�杩戠殑鍥涘悜绌挎杞︾嚎绋� + + ArrayList<ShuttleThread> sameLev = new ArrayList<>();//鐩稿悓妤煎眰鐨勭┛姊溅 + ArrayList<ShuttleThread> diffLev = new ArrayList<>();//涓嶅悓妤煎眰鐨勭┛姊溅 for (ShuttleSlave shuttle : slaveProperties.getShuttle()) { //鑾峰彇鍥涘悜绌挎杞︾嚎绋� @@ -1051,58 +1134,131 @@ String shuttleLocNo = shuttleProtocol.getCurrentLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿 int shuttleLocNoLey = Utils.getLev(shuttleLocNo);//搴撲綅鍙峰搴斿眰楂� if (lev == shuttleLocNoLey) { - //褰撳墠鍥涘悜绌挎杞﹀拰宸ヤ綔妗d换鍔″湪鍚屼竴灞傦紝鍒欒皟閰嶈杞﹁締 - map.put("sameLay", true);//鍚屼竴灞� - map.put("result", shuttleThread); - return map; - } - - //鏇存柊褰撳墠鏈�杩戠殑鍥涘悜绌挎杞� - if (recentShuttle == null) { - recentShuttle = shuttleThread; + //宸ヤ綔妗fゼ灞傜浉鍚岀殑绌挎杞� + sameLev.add(shuttleThread); }else { - ShuttleProtocol recentShuttleProtocol = recentShuttle.getShuttleProtocol();//鐩墠鏈�杩戠┛姊溅 - String recentShuttleLocNo = recentShuttleProtocol.getCurrentLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿 - String recentShuttleLocNoLay = recentShuttleLocNo.substring(recentShuttleLocNo.length() - 2, recentShuttleLocNo.length());//搴撲綅鍙峰搴斿眰楂� - - int recentShuttleLocNoLayInt = Integer.parseInt(recentShuttleLocNoLay); - int i = Math.abs(lev - recentShuttleLocNoLayInt);//宸ヤ綔妗fゼ灞傚噺鏈�杩戠┛姊溅妤煎眰锛屽彇缁濆鍊� - int j = Math.abs(lev - shuttleLocNoLey);//宸ヤ綔妗fゼ灞傚噺褰撳墠绌挎杞︽ゼ灞傦紝鍙栫粷瀵瑰�� - if (i < j) { - //鏇存柊鏈�杩戠┛姊溅 - recentShuttle = shuttleThread; - } else if (i == j) { - //妤煎眰鐩稿悓鎯呭喌 - //鎵捐窛绂诲嚭搴撶偣鏈�杩戠殑杞� - - if (!(recentShuttleProtocol.isIdle() && shuttleProtocol.isIdle())) { - //鍙鏈変竴杈嗚溅涓嶆槸绌洪棽鍒欎笉杩涜璋冨害 - map.put("sameLay", false);//涓嶅悓灞� - map.put("result", null); - return map; - } - - //鑾峰彇鎻愬崌鏈� - LiftSlave liftSlave = slaveProperties.getLift().get(0); - //鎻愬崌鏈哄簱浣嶅彿 - String recentLiftLocNo = liftSlave.getLiftLocNo(recentShuttleLocNoLayInt); - String shuttleLiftLocNo = liftSlave.getLiftLocNo(shuttleLocNoLey); - - //褰撳墠鏈�杩戝洓鍚戠┛姊溅鍒版彁鍗囨満璺緞 - List<NavigateNode> recentShuttlePath = NavigateUtils.calc(recentShuttleLocNo, recentLiftLocNo, ShuttleTaskModeType.PAK_IN.id); - //褰撳墠妤煎眰鍥涘悜绌挎杞﹀埌鎻愬崌鏈鸿矾寰� - List<NavigateNode> shuttlePath = NavigateUtils.calc(shuttleLocNo, shuttleLiftLocNo, ShuttleTaskModeType.PAK_IN.id); - //鍒ゆ柇鍝竴涓矾寰勬渶鐭� - if (shuttlePath.size() < recentShuttlePath.size()) { - //濡傛灉褰撳墠妤煎眰鐨勮溅璺緞鏇村皬锛屽垯鏇存柊鏈�杩戠┛姊溅 - recentShuttle = shuttleThread; - } - } + //宸ヤ綔妗d笉鍚屾ゼ灞傜殑绌挎杞� + diffLev.add(shuttleThread); } +// +// //鏇存柊褰撳墠鏈�杩戠殑鍥涘悜绌挎杞� +// if (recentShuttle == null) { +// recentShuttle = shuttleThread; +// }else { +// ShuttleProtocol recentShuttleProtocol = recentShuttle.getShuttleProtocol();//鐩墠鏈�杩戠┛姊溅 +// String recentShuttleLocNo = recentShuttleProtocol.getCurrentLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿 +// String recentShuttleLocNoLay = recentShuttleLocNo.substring(recentShuttleLocNo.length() - 2, recentShuttleLocNo.length());//搴撲綅鍙峰搴斿眰楂� +// +// int recentShuttleLocNoLayInt = Integer.parseInt(recentShuttleLocNoLay); +// int i = Math.abs(lev - recentShuttleLocNoLayInt);//宸ヤ綔妗fゼ灞傚噺鏈�杩戠┛姊溅妤煎眰锛屽彇缁濆鍊� +// int j = Math.abs(lev - shuttleLocNoLey);//宸ヤ綔妗fゼ灞傚噺褰撳墠绌挎杞︽ゼ灞傦紝鍙栫粷瀵瑰�� +// if (i < j) { +// //鏇存柊鏈�杩戠┛姊溅 +// recentShuttle = shuttleThread; +// } else if (i == j) { +// //妤煎眰鐩稿悓鎯呭喌 +// //鎵捐窛绂诲嚭搴撶偣鏈�杩戠殑杞� +// +// if (!(recentShuttleProtocol.isIdle() && shuttleProtocol.isIdle())) { +// //鍙鏈変竴杈嗚溅涓嶆槸绌洪棽鍒欎笉杩涜璋冨害 +// map.put("sameLay", false);//涓嶅悓灞� +// map.put("result", null); +// return map; +// } +// +// //鑾峰彇鎻愬崌鏈� +// LiftSlave liftSlave = slaveProperties.getLift().get(0); +// //鎻愬崌鏈哄簱浣嶅彿 +// String recentLiftLocNo = liftSlave.getLiftLocNo(recentShuttleLocNoLayInt); +// String shuttleLiftLocNo = liftSlave.getLiftLocNo(shuttleLocNoLey); +// +// //褰撳墠鏈�杩戝洓鍚戠┛姊溅鍒版彁鍗囨満璺緞 +// List<NavigateNode> recentShuttlePath = NavigateUtils.calc(recentShuttleLocNo, recentLiftLocNo, ShuttleTaskModeType.PAK_IN.id); +// //褰撳墠妤煎眰鍥涘悜绌挎杞﹀埌鎻愬崌鏈鸿矾寰� +// List<NavigateNode> shuttlePath = NavigateUtils.calc(shuttleLocNo, shuttleLiftLocNo, ShuttleTaskModeType.PAK_IN.id); +// //鍒ゆ柇鍝竴涓矾寰勬渶鐭� +// if (shuttlePath.size() < recentShuttlePath.size()) { +// //濡傛灉褰撳墠妤煎眰鐨勮溅璺緞鏇村皬锛屽垯鏇存柊鏈�杩戠┛姊溅 +// recentShuttle = shuttleThread; +// } +// } +// } } - map.put("sameLay", false);//涓嶅悓灞� - map.put("result", recentShuttle); + if (sameLev.size() > 0) { + //鍚屼竴妤煎眰鏈夌┖闂茬┛姊溅锛屽垯鍙湪宸ヤ綔妗fゼ灞傚鎵� + //瀵绘壘绂讳换鍔℃渶杩戠殑绌挎杞� + for (ShuttleThread shuttleThread : sameLev) { + if (recentShuttle == null) {//鏈�杩戠┛姊溅涓虹┖锛屽垯榛樿璧嬩簣涓烘渶杩戠┛姊溅 + recentShuttle = shuttleThread; + } + + //鍒ゆ柇鍏朵粬绌洪棽绌挎杞︽槸鍚︾浠诲姟鏈�杩� + String distLocNo = null;//鐩爣鍦扮偣锛屽叆搴�=銆嬫彁鍗囨満鍙o紝鍑哄簱=銆嬭揣鐗╁簱浣嶅彿 + if (wrkMast.getIoType() < 101) { + //鍏ュ簱 + distLocNo = Utils.levToOutInStaLocNo(lev); + }else { + //鍑哄簱 + distLocNo = locNo; + } + + //褰撳墠绌挎杞﹀簱浣嶅彿 + String currentLocNo = shuttleThread.getShuttleProtocol().getCurrentLocNo(); + //鐩墠鏈�杩戠┛姊溅搴撲綅鍙� + String recentLocNo = recentShuttle.getShuttleProtocol().getCurrentLocNo(); + + //褰撳墠鏈�杩戝洓鍚戠┛姊溅鍒扮洰鏍囧湴鐐硅窛绂� + List<NavigateNode> recentShuttlePath = NavigateUtils.calc(recentLocNo, distLocNo, ShuttleTaskModeType.PAK_IN.id); + //褰撳墠绌挎杞︾嚎绋嬪埌鐩爣鍦扮偣璺濈 + List<NavigateNode> currentShuttlePath = NavigateUtils.calc(currentLocNo, distLocNo, ShuttleTaskModeType.PAK_IN.id); + if (recentShuttlePath == null || currentShuttlePath == null) { + continue; + } + Integer recentAllDistance = NavigateUtils.getOriginPathAllDistance(recentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + Integer currentAllDistance = NavigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + if (currentAllDistance < recentAllDistance) { + //濡傛灉褰撳墠妤煎眰鐨勮溅璺緞鏇村皬锛屽垯鏇存柊鏈�杩戠┛姊溅 + recentShuttle = shuttleThread; + } + } + + map.put("sameLay", true);//鍚屽眰 + map.put("result", recentShuttle); + }else { + //鍚屼竴妤煎眰锛屾病鏈夌┖闂茬┛姊溅锛屽彧鑳戒粠鍏朵粬妤煎眰璋冨害 + //瀵绘壘绂讳换鍔℃渶杩戠殑绌挎杞� + for (ShuttleThread shuttleThread : diffLev) { + if (recentShuttle == null) {//鏈�杩戠┛姊溅涓虹┖锛屽垯榛樿璧嬩簣涓烘渶杩戠┛姊溅 + recentShuttle = shuttleThread; + } + + //褰撳墠绌挎杞﹀簱浣嶅彿 + String currentLocNo = shuttleThread.getShuttleProtocol().getCurrentLocNo(); + int currentLev = Utils.getLev(currentLocNo); + //鐩墠鏈�杩戠┛姊溅搴撲綅鍙� + String recentLocNo = recentShuttle.getShuttleProtocol().getCurrentLocNo(); + int recentLev = Utils.getLev(recentLocNo); + + //褰撳墠鏈�杩戝洓鍚戠┛姊溅鍒板綋鍓嶈溅瀛愭墍鍦ㄦゼ灞傜殑鎻愬崌鏈哄彛璺濈 + List<NavigateNode> recentShuttlePath = NavigateUtils.calc(recentLocNo, Utils.levToOutInStaLocNo(recentLev), ShuttleTaskModeType.PAK_IN.id); + //褰撳墠绌挎杞︾嚎绋嬪埌褰撳墠杞﹀瓙鎵�鍦ㄦゼ灞傜殑鎻愬崌鏈哄彛璺濈 + List<NavigateNode> currentShuttlePath = NavigateUtils.calc(currentLocNo, Utils.levToOutInStaLocNo(currentLev), ShuttleTaskModeType.PAK_IN.id); + if (recentShuttlePath == null || currentShuttlePath == null) { + continue; + } + + Integer recentAllDistance = NavigateUtils.getOriginPathAllDistance(recentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + Integer currentAllDistance = NavigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + if (currentAllDistance < recentAllDistance) { + //濡傛灉褰撳墠妤煎眰鐨勮溅璺緞鏇村皬锛屽垯鏇存柊鏈�杩戠┛姊溅 + recentShuttle = shuttleThread; + } + } + + map.put("sameLay", false);//涓嶅悓灞� + map.put("result", recentShuttle); + } return map; } @@ -1293,7 +1449,20 @@ commands.add(command4);//灏嗗懡浠ゆ坊鍔犺繘list wrkMast.setWrkSts(3L);//3.鎻愬崌鏈烘惉杩愪腑 - }else if(wrkMast.getWrkSts() == 6 || wrkMast.getWrkSts() == 23) {//6.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 7.鎻愬崌鏈鸿縼绉诲皬杞︿腑 || 23.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 24.鎻愬崌鏈鸿縼绉诲皬杞︿腑 + } else if (wrkMast.getWrkSts() == 6) {//6.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 7.鎻愬崌鏈鸿縼绉诲皬杞︿腑 + liftProtocol.setShuttleNo(wrkMast.getShuttleNo().shortValue());//璁剧疆鍥涘悜绌挎杞﹀彿 + + //宸ヤ綔妗g洰鏍囧簱浣嶅彿 + String wrkMastLocNo = wrkMast.getIoType() == 101 ? wrkMast.getSourceLocNo() : wrkMast.getLocNo(); + //宸ヤ綔妗g洰鏍囧簱浣嶆ゼ灞� + int wrkMastLocNoLey = Utils.getLev(wrkMastLocNo); + + //鎻愬崌鏈哄墠寰�鐩爣妤煎眰(宸ヤ綔妗g洰鏍囨ゼ灞�) + LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), wrkMastLocNoLey); + commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list + + wrkMast.setWrkSts(7L);//6.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 7.鎻愬崌鏈鸿縼绉诲皬杞︿腑 + } else if(wrkMast.getWrkSts() == 23) {//23.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 24.鎻愬崌鏈鸿縼绉诲皬杞︿腑 liftProtocol.setShuttleNo(wrkMast.getShuttleNo().shortValue());//璁剧疆鍥涘悜绌挎杞﹀彿 //鎵惧埌鍥涘悜绌挎杞︾殑绾跨▼ @@ -1345,7 +1514,7 @@ LiftCommand command4 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 1); commands.add(command4);//灏嗗懡浠ゆ坊鍔犺繘list - wrkMast.setWrkSts(wrkMast.getWrkSts() == 6 ? 7L : 24L);//6.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 7.鎻愬崌鏈鸿縼绉诲皬杞︿腑 || 23.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 24.鎻愬崌鏈鸿縼绉诲皬杞︿腑 + wrkMast.setWrkSts(24L);//23.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 24.鎻愬崌鏈鸿縼绉诲皬杞︿腑 } else if (wrkMast.getWrkSts() == 27) {//27.灏忚溅鍑哄簱鎼繍瀹屾垚 //宸ヤ綔妗f簮搴撲綅鍙� String wrkMastLocNo = wrkMast.getSourceLocNo(); @@ -1421,31 +1590,6 @@ if (liftProtocol == null) { continue; } - -// //褰撴彁鍗囨満鐘舵�佸浜庡伐浣滀腑锛屼絾鎻愬崌鏈哄疄闄呬负绌洪棽鐘舵�侊紝涓旀椂闀胯秴杩�30绉掞紝鑷姩澶嶄綅 -// if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WORKING.id -// && liftProtocol.getTaskNo() != 0 -// && !liftProtocol.getRunning() -// ) { -// if (liftProtocol.getWrkTime() == null) { -// continue; -// } -// -// Date wrkTime = liftProtocol.getWrkTime(); -// Date now = new Date(); -// long interval = (now.getTime() - wrkTime.getTime()) / 1000;//璁$畻鏃堕棿宸� -// if (interval >= 30) {//瓒呰繃30绉掕嚜鍔ㄥ浣� -// //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵�� -// liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); -// //浠诲姟鍙锋竻闆� -// liftProtocol.setTaskNo((short) 0); -// //鏍囪澶嶄綅 -// liftProtocol.setPakMk(true); -// //浠诲姟鎸囦护娓呴浂 -// liftProtocol.setAssignCommand(null); -// News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo()); -// } -// } //鎻愬崌鏈轰负绛夊緟纭涓旂┖闂� if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java index a08c7d4..3ef6d92 100644 --- a/src/main/java/com/zy/asrs/utils/Utils.java +++ b/src/main/java/com/zy/asrs/utils/Utils.java @@ -309,6 +309,26 @@ return staNo; } + //鎻愬崌鏈轰綅缃弽棣堣浆鎹㈠嚭鍏ュ簱绔欑偣搴撲綅鍙� + public static String liftArrivalToOutInStaLocNo(Short liftArrival) { + String locNo = null; + switch (liftArrival) { + case 1: + locNo = "1800201"; + break; + case 4: + locNo = "1800202"; + break; + case 8: + locNo = "1800203"; + break; + case 16: + locNo = "1800204"; + break; + } + return locNo; + } + //妤煎眰杞崲瀵瑰簲鍑哄叆搴撶珯鐐瑰簱浣嶅彿 public static String levToOutInStaLocNo(Integer lev) { String locNo = null; diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java index d96542a..9ac5f03 100644 --- a/src/main/java/com/zy/common/utils/NavigateUtils.java +++ b/src/main/java/com/zy/common/utils/NavigateUtils.java @@ -184,6 +184,19 @@ } /** + * 鏍规嵁鍘熷鑺傜偣缁撴灉锛岃绠楁�昏璧拌窛绂� + */ + public static Integer getOriginPathAllDistance(List<NavigateNode> path) { + ArrayList<ArrayList<NavigateNode>> sectionPath = NavigateUtils.getSectionPath(path); + Integer allDistance = 0; + for (ArrayList<NavigateNode> navigateNodes : sectionPath) { + Integer distance = NavigateUtils.getCurrentPathAllDistance(navigateNodes); + allDistance += distance; + } + return allDistance; + } + + /** * 鑾峰彇褰撳墠璺緞鎬昏璧拌窛绂� */ public static Integer getCurrentPathAllDistance(List<NavigateNode> path) { diff --git a/src/main/java/com/zy/core/model/protocol/LiftProtocol.java b/src/main/java/com/zy/core/model/protocol/LiftProtocol.java index 391a366..419beee 100644 --- a/src/main/java/com/zy/core/model/protocol/LiftProtocol.java +++ b/src/main/java/com/zy/core/model/protocol/LiftProtocol.java @@ -269,8 +269,45 @@ } public void setPositionArrivalFeedback(Short position) { - this.lev = position;//灞傞珮 + Short lev = 1; + switch (position) { + case 1: + lev = 1; + break; + case 4: + lev = 2; + break; + case 8: + lev = 3; + break; + case 16: + lev = 4; + break; + } + this.lev = lev;//灞傞珮 this.positionArrivalFeedback = position;//浣嶇疆鍒拌揪鍙嶉 } + public Integer getPositionArrivalFeedback$() { + if (this.positionArrivalFeedback == null) { + return null; + } + + switch (this.positionArrivalFeedback) { + case 1: + return 1; + case 2: + return 2; + case 4: + return 3; + case 8: + return 4; + case 16: + return 5; + } + + return null; + } + + } diff --git a/src/main/java/com/zy/core/thread/LiftThread.java b/src/main/java/com/zy/core/thread/LiftThread.java index d1b2299..c1c4a82 100644 --- a/src/main/java/com/zy/core/thread/LiftThread.java +++ b/src/main/java/com/zy/core/thread/LiftThread.java @@ -6,6 +6,7 @@ import HslCommunication.ModBus.ModbusTcpNet; import com.alibaba.fastjson.JSON; import com.core.common.DateUtils; +import com.core.common.RadixTools; import com.core.common.SpringUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.BasLift; @@ -21,7 +22,6 @@ import com.zy.core.cache.OutputQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.*; -import com.zy.core.model.DevpSlave; import com.zy.core.model.LiftSlave; import com.zy.core.model.Task; import com.zy.core.model.command.*; @@ -127,7 +127,7 @@ liftProtocol.setLiftLock(CommonUtils.shortToBoolean(modbusTcpNet.getByteTransform().TransInt16(content, 0))); //浣嶇疆鍒拌揪鍙嶉 liftProtocol.setPositionArrivalFeedback(modbusTcpNet.getByteTransform().TransInt16(content,2)); - + byte by = modbusTcpNet.getByteTransform().TransByte(content, 5); int[] datas = CommonUtils.byteToBits(by); //鍑嗗灏辩华 @@ -400,6 +400,12 @@ News.info("鎻愬崌鏈哄懡浠や笅鍙戞垚鍔燂紝鎻愬崌鏈哄彿={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command)); liftProtocol.setWrkTime(new Date());//鏇存柊宸ヤ綔鏃堕棿 + try { + Thread.sleep(1000);//鍛戒护涓嬪彂瀹屾垚鍚庝紤鐪�1s + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + //鍒ゆ柇鏁版嵁鏄惁鎵ц瀹屾垚 if (commandStep < size - 1) { //鏇存柊redis鏁版嵁 diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java index 25a2ef2..77dfe69 100644 --- a/src/main/java/com/zy/core/thread/ShuttleThread.java +++ b/src/main/java/com/zy/core/thread/ShuttleThread.java @@ -525,8 +525,8 @@ //濡傛灉绌挎杞﹀湪鎻愬崌鏈哄唴锛岀Щ鍔ㄦ椂闇�瑕佸厛涓嬪彂鍑烘彁鍗囨満鍛戒护 if (liftProtocol.getBarcode().intValue() == shuttleProtocol.getCurrentCode().intValue()) { //绌挎杞﹀嚭鎻愬崌鏈� - Short liftLev = liftProtocol.getPositionArrivalFeedback();//鎻愬崌鏈轰綅缃� - String liftSiteLocNo = Utils.levToOutInStaLocNo(liftLev.intValue()); + Short liftArrival = liftProtocol.getPositionArrivalFeedback();//鎻愬崌鏈轰綅缃弽棣� + String liftSiteLocNo = Utils.liftArrivalToOutInStaLocNo(liftArrival); LocMast locMast1 = locMastService.selectById(liftSiteLocNo); ShuttleCommand moveCommand = getMoveCommand(liftProtocol.getBarcode(), Short.parseShort(locMast1.getQrCodeValue()), 1400, ShuttleRunDirection.BOTTOM.id, liftProtocol.getBarcode(), 1400, runSpeed); commands.add(moveCommand); @@ -745,6 +745,42 @@ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + + + //鍒ゆ柇灏忚溅褰撳墠浜岀淮鐮佹槸鍚︿负鎻愬崌鏈轰簩缁寸爜 + if (shuttleProtocol.getCurrentCode().intValue() == liftProtocol.getBarcode().intValue()) { + //灏忚溅褰撳墠鍛戒护璧峰浣嶇疆灏辨槸鎻愬崌鏈轰簩缁寸爜锛岃鏄庡皬杞﹂渶瑕佸悜鎻愬崌鏈哄绉诲姩锛屽垯闇�瑕佸垽鏂姸鎬佹槸鍚︽弧瓒� + if (command.getStartCodeNum().intValue() == liftProtocol.getBarcode().intValue()){ + //鎻愬崌鏈烘槸鍚︾┖闂诧紝鎻愬崌鏈烘槸鍚﹀埌杈剧洰鏍囨ゼ灞傦紝鐩爣妤煎眰鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙蜂綅 + if (!liftProtocol.isIdle()) { + return false;//鎻愬崌鏈哄繖锛岀姝笅鍙戝懡浠� + } + + Short distCodeNum = command.getDistCodeNum();//鐩爣浜岀淮鐮� + BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); + BasDevp basDevp = basDevpService.queryByQrCode(distCodeNum.intValue());//鐩爣绔欑偣 + if (basDevp == null) { + return false;//鎵句笉鍒扮洰鏍囩珯锛岀姝笅鍙戝懡浠� + } + + int lev = Utils.getLev(basDevp.getLocNo());//鐩爣浜岀淮鐮佹墍鍦ㄦゼ灞� + int liftLev = liftProtocol.getLev().intValue();//鎻愬崌鏈烘墍鍦ㄦゼ灞� + if (liftLev != lev) { + return false;//鎻愬崌鏈轰笉鍦ㄧ洰鏍囨ゼ灞傦紝绂佹涓嬪彂鍛戒护 + } + + //鑾峰彇鐩爣绔欎俊鎭� + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); + StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo()); + if (staProtocol == null) { + return false;//绔欑偣淇℃伅涓嶅瓨鍦紝绂佹涓嬪彂鍛戒护 + } + if (!staProtocol.isLiftArrival()) { + return false;//绔欑偣鎻愬崌鏈哄埌浣嶄俊鍙穎alse锛岀姝笅鍙戝懡浠� + } + } + } + //涓嬪彂鍛戒护 if (!write(command)) { @@ -752,6 +788,12 @@ return false; } else { News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); + + try { + Thread.sleep(1000);//鍛戒护涓嬪彂瀹屽悗浼戠湢1s + } catch (InterruptedException e) { + throw new RuntimeException(e); + } //鍒ゆ柇鏁版嵁鏄惁鎵ц瀹屾垚 if (commandStep < size - 1) { @@ -906,7 +948,7 @@ String shuttleLocNo = shuttleProtocol.getCurrentLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿 Integer shuttleLocNoLev = shuttleLocNo == null ? 0 : Utils.getLev(shuttleLocNo);//搴撲綅鍙峰搴斿眰楂� - //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀湪鐩爣妤煎眰 + //鍒ゆ柇绌挎杞﹀拰鎻愬崌鏈烘槸鍚﹀湪鐩爣妤煎眰 if (shuttleLocNoLev >= 2) { shuttleLocNoLev++; } @@ -916,7 +958,7 @@ SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); StaProtocol staProtocol = siemensDevpThread.getStation().get(siteNo); if (staProtocol.isLiftArrival() - && liftProtocol.getPositionArrivalFeedback().intValue() == shuttleLocNoLev) { + && liftProtocol.getPositionArrivalFeedback$() == shuttleLocNoLev) { //杈撻�佺嚎鍙嶉鎻愬崌鏈哄埌浣嶄笖鎻愬崌鏈烘ゼ灞傚弽棣堜负鍚屼竴灞傦紝鐩存帴鏀捐 return true; } -- Gitblit v1.9.1