From 00d9f3f5cf3b046cb42098c9bc13f2313a435f53 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期二, 27 六月 2023 10:32:50 +0800 Subject: [PATCH] 提升机搬运前判断目标站是否可入 --- src/main/java/com/zy/core/thread/ShuttleThread.java | 112 ++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 72 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java index 8b52bed..30dac2d 100644 --- a/src/main/java/com/zy/core/thread/ShuttleThread.java +++ b/src/main/java/com/zy/core/thread/ShuttleThread.java @@ -366,6 +366,11 @@ OperateResult result = modbusTcpNet.Write("0", array);; if (result != null && result.IsSuccess) { + try { + Thread.sleep(3000);//鍛戒护涓嬪彂鍚庝紤鐪�1s + } catch (InterruptedException e) { + throw new RuntimeException(e); + } News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); return true; @@ -648,9 +653,6 @@ return false; } - //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂) - shuttleProtocol.setPakMk(false); - List<ShuttleCommand> errorCommands = redisCommand.getErrorCommands(); if (errorCommands.size() > 0) { //浼樺厛鎵ц璇ユ寚浠� @@ -752,8 +754,12 @@ //灏忚溅褰撳墠鍛戒护璧峰浣嶇疆灏辨槸鎻愬崌鏈轰簩缁寸爜锛岃鏄庡皬杞﹂渶瑕佸悜鎻愬崌鏈哄绉诲姩锛屽垯闇�瑕佸垽鏂姸鎬佹槸鍚︽弧瓒� if (command.getStartCodeNum().intValue() == liftProtocol.getBarcode().intValue()){ //鎻愬崌鏈烘槸鍚︾┖闂诧紝鎻愬崌鏈烘槸鍚﹀埌杈剧洰鏍囨ゼ灞傦紝鐩爣妤煎眰鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙蜂綅 - if (!liftProtocol.isIdle()) { + if (!liftProtocol.isIdleNoTask()) { return false;//鎻愬崌鏈哄繖锛岀姝笅鍙戝懡浠� + } + if (liftProtocol.getTaskNo().intValue() != wrkNo) { + //鎻愬崌鏈哄伐浣滃彿鍜屽綋鍓嶅伐浣滀笉鐩稿悓锛岀姝笅鍙戝懡浠� + return false; } Short distCodeNum = command.getDistCodeNum();//鐩爣浜岀淮鐮� @@ -781,7 +787,6 @@ } } - //涓嬪彂鍛戒护 if (!write(command)) { News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); @@ -789,10 +794,25 @@ } else { News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); - try { - Thread.sleep(1000);//鍛戒护涓嬪彂瀹屽悗浼戠湢1s - } catch (InterruptedException e) { - throw new RuntimeException(e); + //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂) + shuttleProtocol.setPakMk(false); + + //淇濆瓨鏁版嵁鍒版暟鎹簱鍋氭祦姘� + BasShuttleOptService shuttleOptService = SpringUtils.getBean(BasShuttleOptService.class); + if (shuttleOptService != null) { + BasShuttleOpt opt = new BasShuttleOpt( + assignCommand.getTaskNo().intValue(), + assignCommand.getShuttleNo().intValue(), + new Date(), + ShuttleTaskModeType.get(assignCommand.getTaskMode()).desc, + assignCommand.getSourceLocNo(), + assignCommand.getLocNo(), + null, + null, + null, + JSON.toJSONString(command) + ); + shuttleOptService.insert(opt); } //鍒ゆ柇鏁版嵁鏄惁鎵ц瀹屾垚 @@ -805,23 +825,6 @@ redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand)); }else { //宸叉墽琛屽畬鎴� - //淇濆瓨鏁版嵁鍒版暟鎹簱鍋氭祦姘� - BasShuttleOptService shuttleOptService = SpringUtils.getBean(BasShuttleOptService.class); - if (shuttleOptService != null) { - BasShuttleOpt opt = new BasShuttleOpt( - assignCommand.getTaskNo().intValue(), - assignCommand.getShuttleNo().intValue(), - new Date(), - ShuttleTaskModeType.get(assignCommand.getTaskMode()).desc, - assignCommand.getSourceLocNo(), - assignCommand.getLocNo(), - null, - null, - null, - JSON.toJSONString(assignCommand) - ); - shuttleOptService.insert(opt); - } if (redisCommand.getLiftSecurityMk()) { //鏇鹃攣瀹氳繃鎻愬崌鏈猴紝闇�瑕佽繘琛岃В閿� @@ -856,7 +859,7 @@ }else { shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING); } - News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屽畬鎴愮瓑寰呯‘璁や腑锛岀┛姊溅鍙�={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); + News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屼笅鍙戝畬鎴愮瓑寰呮墽琛岀粨鏉燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); } } @@ -916,14 +919,19 @@ qrCodeValues.add(Short.parseShort(basDevp.getQrCodeValue())); } - //閬嶅巻鎵�鏈夋寚浠わ紝鍒ゆ柇鏄惁鏈夊埌鎻愬崌鏈哄彛鐨勬寚浠わ紝骞惰幏鍙栧埌杈捐鎻愬崌鏈哄彛鎵�闇�姝ュ簭 + //閬嶅巻鎵�鏈夋寚浠わ紝鍒ゆ柇鏄惁鏈夊埌鎻愬崌鏈哄彛鐨勬寚浠ゆ垨浠庢彁鍗囨満鍙e墠寰�鎻愬崌鏈哄唴鐨勬寚浠わ紝骞惰幏鍙栧埌杈捐鎻愬崌鏈哄彛鎵�闇�姝ュ簭 int step = 0; Integer siteNo = null;//绔欑偣鍙� ShuttleCommand command = null; for (int i = 0; i < commands.size(); i++) { command = commands.get(i); for (Short qrCodeValue : qrCodeValues) { - if (qrCodeValue.intValue() == command.getDistCodeNum().intValue()) { + //鐩爣浣嶇疆鏄彁鍗囨満鍙o紝鎴栬捣鐐逛綅缃槸鎻愬崌鏈哄彛涓旂洰鏍囨槸鍘绘彁鍗囨満鍐� + if (command.getDistCodeNum() == null || command.getStartCodeNum() == null) { + continue; + } + + if (qrCodeValue.intValue() == command.getDistCodeNum().intValue() || (qrCodeValue.intValue() == command.getStartCodeNum().intValue() && command.getDistCodeNum().intValue() == liftProtocol.getBarcode().intValue())) { //瀛樺湪 step = i + 1; BasDevp basDevp = basDevpService.queryByQrCode(qrCodeValue.intValue()); @@ -938,11 +946,21 @@ return true; } - //鍒ゆ柇涓嬩竴姝ユ槸鍚︿负鎻愬崌鏈哄彛 - if (commandStep + 1 != step) { - //涓嬩竴姝ヤ笉鏄彁鍗囨満鍙o紝璺宠繃鍚庣画娴佺▼ - return true; + //鍒ゆ柇涓嬩竴姝ユ槸鍚︿负鎻愬崌鏈哄彛鎴栨彁鍗囨満鍐� + if (commandStep < commands.size()) { + ShuttleCommand command1 = commands.get(commandStep); + Short distCodeNum = command1.getDistCodeNum(); + if (distCodeNum != null) { + BasDevp basDevp = basDevpService.queryByQrCode(Integer.valueOf(distCodeNum)); + if (basDevp == null && distCodeNum.intValue() != liftProtocol.getBarcode().intValue()) { + return true;//涓嬩竴姝ヤ笉鏄彁鍗囨満鍙o紝璺宠繃鍚庣画娴佺▼ + } + } } +// if (commandStep + 1 != step) { +// //涓嬩竴姝ヤ笉鏄彁鍗囨満鍙o紝璺宠繃鍚庣画娴佺▼ +// return true; +// } //鑾峰彇鍥涘悜绌挎杞﹀綋鍓嶆ゼ灞� String shuttleLocNo = shuttleProtocol.getCurrentLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿 @@ -957,13 +975,28 @@ if (siteNo != null) { SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); StaProtocol staProtocol = siemensDevpThread.getStation().get(siteNo); - if (staProtocol.isLiftArrival() - && liftProtocol.getPositionArrivalFeedback$() == shuttleLocNoLev) { - //杈撻�佺嚎鍙嶉鎻愬崌鏈哄埌浣嶄笖鎻愬崌鏈烘ゼ灞傚弽棣堜负鍚屼竴灞傦紝鐩存帴鏀捐 + if (!staProtocol.isLiftArrival()) { + //杈撻�佺嚎鍙嶉鎻愬崌鏈烘病鏈夊埌浣� + executeLift(liftThread, liftProtocol, redisCommand, shuttleLocNoLev);//璋冨害鎻愬崌鏈� + return false; + } + + if (shuttleProtocol.getCurrentCode().intValue() == liftProtocol.getBarcode().intValue()) { + //灏忚溅澶勪簬鎻愬崌鏈哄唴 return true; + }else { + if (liftProtocol.getPositionArrivalFeedback$() == shuttleLocNoLev) { + return true;//鎻愬崌鏈哄埌浣� + } + executeLift(liftThread, liftProtocol, redisCommand, shuttleLocNoLev);//璋冨害鎻愬崌鏈� + return false;//鎻愬崌鏈烘病鏈夊埌浣� } } + return false; + } + + private boolean executeLift(LiftThread liftThread, LiftProtocol liftProtocol, ShuttleRedisCommand redisCommand, Integer shuttleLocNoLev) {//璋冨害鎻愬崌鏈� if (liftProtocol.getRunning()) { //鎻愬崌鏈鸿繍琛屼腑锛岀姝笅鍙� return false; @@ -981,7 +1014,7 @@ liftProtocol.setSecurityMk(true);//鏍囪缃负true锛岄槻姝㈠叾浠栦换鍔″崰鐢ㄥ綋鍓嶆彁鍗囨満 redisCommand.setLiftSecurityMk(true);//鏍囪缃负true锛岄槻姝㈠叾浠栦换鍔″崰鐢ㄥ綋鍓嶆彁鍗囨満 //浠诲姟鏁版嵁淇濆瓨鍒皉edis - redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand)); + redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand)); //鍛戒护list ArrayList<LiftCommand> liftCommands = new ArrayList<>(); @@ -994,8 +1027,7 @@ liftAssignCommand.setTaskNo(liftProtocol.getTaskNo()); //涓嬪彂浠诲姟 MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, liftAssignCommand)); - - return false; + return true; } /** @@ -1088,7 +1120,7 @@ * 姝e父绉诲姩鍛戒护,榛樿绉诲姩閫熷害1000 */ public ShuttleCommand getMoveCommand(Short startCodeNum, Short distCodeNum, Integer startToDistDistance, Short runDirection, Short middleCodeNum, Integer middleToDistDistance) { - return getMoveCommand(startCodeNum, distCodeNum, startToDistDistance, runDirection, middleCodeNum, middleToDistDistance, 1000); + return getMoveCommand(startCodeNum, distCodeNum, startToDistDistance, runDirection, middleCodeNum, middleToDistDistance, 500); } /** -- Gitblit v1.9.1