From f7bcd87b19bf265d0fa157f110632d6b661ec22d Mon Sep 17 00:00:00 2001 From: LSH Date: 星期一, 25 九月 2023 15:25:03 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/model/DevpSlave.java | 4 src/main/java/com/zy/asrs/utils/RouteUtils.java | 24 ++ src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 392 +++++++++++++++++++++++++++++++++++++++++-- src/main/java/com/zy/asrs/mapper/WrkMastMapper.java | 8 src/main/resources/mapper/WrkMastMapper.xml | 31 +++ src/main/java/com/zy/core/MainProcess.java | 5 src/main/resources/application.yml | 37 ++++ 7 files changed, 476 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java index 887a810..b9b6e3f 100644 --- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java +++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java @@ -255,6 +255,14 @@ WrkMast selectWrkMastLabelingOne54(); + List<WrkMast> selectWaitBindRGVRgvNo(@Param("rgvNo") Integer rgvNo); + List<WrkMast> selectWaitBindRgvNo2(@Param("rgvNo") Integer rgvNo); + void insertRgvMast(@Param("wrkNo") Integer wrkNo); + void updateRgvMast(@Param("wrkNo") Integer wrkNo); + + WrkMast selectWaitBindRgvNoOneWrkNo(@Param("wrkNo") Integer wrkNo); + + /*..............................涓婇ザ姹熼摐..............浠ヤ笂.............寰愬伐姹変簯..............................*/ 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 5cb274b..e3dfe47 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -580,27 +580,145 @@ return null; } +// /** +// * 缁戝畾灏忚溅鏂规硶 +// */ +// public synchronized void rgvBindSte() { +// //鑾峰彇绛夊緟缁戝畾RGV鐨勪换鍔� +// List<WrkMast> wrkMasts = wrkMastMapper.selectWaitBindRGV(); +// for (WrkMast wrkMast : wrkMasts) { +// //鐩爣绔� +// Integer staNo = wrkMast.getStaNo(); +// //婧愮珯 +// Integer sourceStaNo = wrkMast.getSourceStaNo(); +// //閫氳繃鐩爣绔欐悳绱gv鍙� +// Integer rgvNo=0; +// if (wrkMast.getCrnNo()==1){ +// rgvNo=1; +// }else if (wrkMast.getCrnNo()==6){ +// rgvNo=2; +// }else { +// rgvNo = this.searchRgvNo(staNo); +// } +// if (rgvNo == null || rgvNo==0) {//鏈壘鍒板彲鐢ㄧ殑rgv +// continue; +// } +// +// wrkMast.setRgvNo(rgvNo);//缁戝畾rgv鍙� +// wrkMast.setRgvDstaNo(wrkMast.getSourceStaNo());//璁剧疆RGV鍓嶅線宸ヤ綔妗f簮绔欏彇璐� +// if (wrkMastMapper.updateById(wrkMast)==0){ +// log.error("缁戝畾灏忚溅鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo()); +// } +// } +// } + /** * 缁戝畾灏忚溅鏂规硶 */ public synchronized void rgvBindSte() { - //鑾峰彇绛夊緟缁戝畾RGV鐨勪换鍔� - List<WrkMast> wrkMasts = wrkMastMapper.selectWaitBindRGV(); - for (WrkMast wrkMast : wrkMasts) { - //鐩爣绔� - Integer staNo = wrkMast.getStaNo(); - //婧愮珯 - Integer sourceStaNo = wrkMast.getSourceStaNo(); - //閫氳繃鐩爣绔欐悳绱gv鍙� - Integer rgvNo = this.searchRgvNo(staNo); - if (rgvNo == null) {//鏈壘鍒板彲鐢ㄧ殑rgv + try { + // 鏍规嵁杈撻�佺嚎plc閬嶅巻 + for (DevpSlave devp : slaveProperties.getDevp()) { + if (devp.getId()==2){ + continue; + } + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + //鍏ュ簱缁戝皬杞� + for (DevpSlave.Sta Sta : devp.getInRgvSta()) { + StaProtocol staProtocol = devpThread.getStation().get(Sta.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() < 9990){ + List<WrkMast> wrkMasts = wrkMastMapper.selectList(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol.getWorkNo()).eq("wrk_sts", 2L)); + if (Cools.isEmpty(wrkMasts) || wrkMasts.size()!=1){ + continue; + } + WrkMast wrkMast = wrkMasts.get(0); + //鐩爣绔� + Integer staNo = wrkMast.getStaNo(); + //閫氳繃鐩爣绔欐悳绱gv鍙� + Integer rgvNo=0; + if (wrkMast.getCrnNo()==1){ + rgvNo=1; + }else if (wrkMast.getCrnNo()==6){ + rgvNo=2; + }else { + rgvNo = this.searchRgvNo(staNo); + } + if (rgvNo == null || rgvNo==0) {//鏈壘鍒板彲鐢ㄧ殑rgv + continue; + } + wrkMast.setRgvNo(rgvNo);//缁戝畾rgv鍙� + if (wrkMastMapper.updateById(wrkMast)==0){ + log.error("缁戝畾灏忚溅鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo()); + } + } + } + //鍑哄簱缁戝皬杞� + for (DevpSlave.Sta Sta : devp.getOutRgvSta()) { + StaProtocol staProtocol = devpThread.getStation().get(Sta.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() < 9990){ + List<WrkMast> wrkMasts = wrkMastMapper.selectList(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol.getWorkNo()).eq("wrk_sts", 14L)); + if (Cools.isEmpty(wrkMasts) || wrkMasts.size()!=1){ + continue; + } + WrkMast wrkMast = wrkMasts.get(0); + //鐩爣绔� + Integer staNo = wrkMast.getStaNo(); + //閫氳繃鐩爣绔欐悳绱gv鍙� + Integer rgvNo=0; + if (wrkMast.getCrnNo()==1){ + rgvNo=1; + }else if (wrkMast.getCrnNo()==6){ + rgvNo=2; + }else { + rgvNo = this.searchRgvNo(staNo); + } + if (rgvNo == null || rgvNo==0) {//鏈壘鍒板彲鐢ㄧ殑rgv + continue; + } + wrkMast.setRgvNo(rgvNo);//缁戝畾rgv鍙� + if (wrkMastMapper.updateById(wrkMast)==0){ + log.error("缁戝畾灏忚溅鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo()); + } + } + } + } + }catch (Exception e){ + log.error("缁戝畾灏忚溅寮傚父锛歿}", e.getMessage()); + } + } + + /** + * 缁戝畾灏忚溅鏂规硶 + */ + public synchronized void rgvBindSte2() { + for (RgvSlave rgv : slaveProperties.getRgv()) { + List<WrkMast> wrkMasts = wrkMastMapper.selectWaitBindRGVRgvNo(rgv.getId()); + if (!Cools.isEmpty(wrkMasts) && wrkMasts.size()!=0){ continue; } - - wrkMast.setRgvNo(rgvNo);//缁戝畾rgv鍙� - wrkMast.setRgvDstaNo(wrkMast.getSourceStaNo());//璁剧疆RGV鍓嶅線宸ヤ綔妗f簮绔欏彇璐� - if (wrkMastMapper.updateById(wrkMast)==0){ - log.error("缁戝畾灏忚溅鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo()); + List<WrkMast> wrkMasts2 = wrkMastMapper.selectWaitBindRgvNo2(rgv.getId()); + for (WrkMast wrkMast : wrkMasts2) { + if (wrkMastMapper.selectWaitBindRgvNoOneWrkNo(wrkMast.getWrkNo())!=null){ + continue; + } + //鐩爣绔� + BasDevp basDevp = basDevpService.selectById(wrkMast.getRgvDstaNo()); + if (Cools.isEmpty(basDevp) || !basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("N") || basDevp.getWrkNo()!=0){ + continue; + } + wrkMastMapper.insertRgvMast(wrkMast.getWrkNo()); + wrkMastMapper.updateRgvMast(wrkMast.getWrkNo()); + break; } } } @@ -608,7 +726,7 @@ /** * 鍏ュ嚭搴� ===>> RGV鍏ュ嚭搴撲綔涓氫笅鍙� */ - public synchronized void rgvIoExecute() { + public synchronized void rgvIoExecuteOld() { for (RgvSlave rgv : slaveProperties.getRgv()) { // 鑾峰彇RGV淇℃伅 RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); @@ -627,12 +745,102 @@ && rgvProtocol.getModeType() == RgvModeType.AUTO // && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 // && rgvProtocol.getLoaded1() == 0 && rgvProtocol.getLoaded2() == 0 - ) { + ) { //鏌ユ壘鏄惁瀛樺湪鍏ュ嚭搴撳伐浣滀腑绛夊緟RGV鎼繍鐨勪换鍔� List<WrkMast> wrkMasts = wrkMastMapper.selectIoRgvNo(rgv.getId()); for (WrkMast wrkMast : wrkMasts) { if (wrkMast.getWrkSts() == 2) {//2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓� + if (rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getLoaded1() != 0) {//RGV鏄惁鏃犱换鍔°�丷GV鏄惁鏃犺揣 + continue; + } + + //鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + Integer staNo = wrkMast.getSourceStaNo(); + BasDevp basDevp = basDevpService.selectById(staNo); + if (basDevp == null) { + continue;//鐩爣绔欎笉瀛樺湪 + } + //璧峰璺緞 + int startPath = rgvProtocol.getRgvPos().intValue(); + //鐩爣璺緞鍊� + int endPath = basDevp.getLocType3().intValue(); +// boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + if (pathUsed) { + //琛岃蛋璺緞琚崰鐢紝绂佹涓嬪彂鍛戒护 + continue; + } + //琛岃蛋璺緞绌洪棽锛岄攣瀹氳矾寰� + RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true); + + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 宸ヤ綅1浠诲姟妯″紡: 鍙栬揣 + rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓� + Date now = new Date(); + wrkMast.setWrkSts(3L); + wrkMast.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); + } + } + } else if (wrkMast.getWrkSts() == 14) {//4.RGV鍙栬揣瀹屾垚 => 5.RGV鏀捐揣涓� 14鍑哄簱瀹屾垚 + if (rgvProtocol.getTaskNo1() == 0 || !rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue())) {//RGV蹇呴』鏈変换鍔′笖浠诲姟鍜屽綋鍓嶅伐浣滄。涓�鑷� + continue; + } + if (rgvProtocol.getLoaded1() == 0) {//RGV蹇呴』鏈夌墿 + continue; + } + + //鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + Integer staNo = wrkMast.getStaNo(); + BasDevp basDevp = basDevpService.selectById(staNo); + if (basDevp == null) { + continue;//鐩爣绔欎笉瀛樺湪 + } + //璧峰璺緞 + int startPath = rgvProtocol.getRgvPos().intValue(); + //鐩爣璺緞鍊� + int endPath = basDevp.getLocType3().intValue(); + boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + if (pathUsed) { + //琛岃蛋璺緞琚崰鐢紝绂佹涓嬪彂鍛戒护 + continue; + } + //琛岃蛋璺緞绌洪棽锛岄攣瀹氳矾寰� + RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true); + + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 宸ヤ綅1浠诲姟妯″紡: 鏀捐揣 + rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 4.RGV鍙栬揣瀹屾垚 => 5.RGV鏀捐揣涓� + Date now = new Date(); + wrkMast.setWrkSts(5L); + wrkMast.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 4.RGV鍙栬揣瀹屾垚 => 5.RGV鏀捐揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); + } + } + } else if (wrkMast.getWrkSts() == 23) {//23.璁惧涓婅蛋1 => 24.RGV鍙栬揣涓� if (rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getLoaded1() != 0) {//RGV鏄惁鏃犱换鍔°�丷GV鏄惁鏃犺揣 continue; } @@ -667,6 +875,154 @@ //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand)); } else { + // 淇敼宸ヤ綔妗g姸鎬� 23.璁惧涓婅蛋1 => 24.RGV鍙栬揣涓� + Date now = new Date(); + wrkMast.setWrkSts(24L); + wrkMast.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 23.璁惧涓婅蛋1 => 24.RGV鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); + } + } + } else if (wrkMast.getWrkSts() == 25) {//25.RGV鍙栬揣瀹屾垚 => 26.RGV鏀捐揣涓� + if (rgvProtocol.getTaskNo1() == 0 || !rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue())) {//RGV蹇呴』鏈変换鍔′笖浠诲姟鍜屽綋鍓嶅伐浣滄。涓�鑷� + continue; + } + if (rgvProtocol.getLoaded1() == 0) {//RGV蹇呴』鏈夌墿 + continue; + } + + //鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + Integer staNo = wrkMast.getStaNo(); + BasDevp basDevp = basDevpService.selectById(staNo); + if (basDevp == null) { + continue;//鐩爣绔欎笉瀛樺湪 + } + //璧峰璺緞 + int startPath = rgvProtocol.getRgvPos().intValue(); + //鐩爣璺緞鍊� + int endPath = basDevp.getLocType3().intValue(); + boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + if (pathUsed) { + //琛岃蛋璺緞琚崰鐢紝绂佹涓嬪彂鍛戒护 + continue; + } + //琛岃蛋璺緞绌洪棽锛岄攣瀹氳矾寰� + RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true); + + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 宸ヤ綅1浠诲姟妯″紡: 鏀捐揣 + rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 25.RGV鍙栬揣瀹屾垚 => 26.RGV鏀捐揣涓� + Date now = new Date(); + wrkMast.setWrkSts(26L); + wrkMast.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 25.RGV鍙栬揣瀹屾垚 => 26.RGV鏀捐揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); + } + } + } + } + + } + } + } + + /** + * 鍏ュ嚭搴� ===>> RGV鍏ュ嚭搴撲綔涓氫笅鍙� + */ + public synchronized void rgvIoExecute() { + for (RgvSlave rgv : slaveProperties.getRgv()) { + RgvSlave rgvSlave=null; + if (rgv.getId()==1){ + rgvSlave = slaveProperties.getRgv().get(1); + }else { + rgvSlave = slaveProperties.getRgv().get(0); + } + + // 鑾峰彇RGV淇℃伅 + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + } + + RgvThread rgvThreadSlave = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); + RgvProtocol rgvProtocolSlave = rgvThreadSlave.getRgvProtocol(); + BasRgv basRgvSlave = null; + if (rgvProtocolSlave == null) { + rgvSlave=null; + }else { + basRgvSlave = basRgvService.selectById(rgv.getId()); + if (basRgvSlave == null) { + rgvSlave=null; + } + } + + BasRgv basRgv = basRgvService.selectById(rgv.getId()); + if (basRgv == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgv.getId()); + continue; + } + + boolean signSlave=false;//姝ゅ鍒ゆ柇RgvSlave鏄惁宸茬粡瑙勯伩 + boolean signSlaveState=false;//姝ゅ鍒ゆ柇RgvSlave鏄惁绌洪棽 + Integer staSlave = 0;//姝ゅ璁板綍RgvSlave褰撳墠浣嶇疆 + + // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�, + if (rgvProtocol.getStatusType() == RgvStatusType.IDLE + && rgvProtocol.getModeType() == RgvModeType.AUTO +// && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 +// && rgvProtocol.getLoaded1() == 0 && rgvProtocol.getLoaded2() == 0 + ) { + + //鏌ユ壘鏄惁瀛樺湪鍏ュ嚭搴撳伐浣滀腑绛夊緟RGV鎼繍鐨勪换鍔� + List<WrkMast> wrkMasts = wrkMastMapper.selectIoRgvNo(rgv.getId()); + for (WrkMast wrkMast : wrkMasts) { + if (wrkMast.getWrkSts() == 2) {//2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓� + if (rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getLoaded1() != 0) {//RGV鏄惁鏃犱换鍔°�丷GV鏄惁鏃犺揣 + continue; + } + + //鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + Integer staNo = wrkMast.getSourceStaNo(); + BasDevp basDevp = basDevpService.selectById(staNo); + if (basDevp == null) { + continue;//鐩爣绔欎笉瀛樺湪 + } + //璧峰璺緞 + int startPath = rgvProtocol.getRgvPos().intValue(); + //鐩爣璺緞鍊� + int endPath = basDevp.getLocType3().intValue(); +// boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + if (pathUsed) { + //琛岃蛋璺緞琚崰鐢紝绂佹涓嬪彂鍛戒护 + continue; + } + //琛岃蛋璺緞绌洪棽锛岄攣瀹氳矾寰� + RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true); + + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 宸ヤ綅1浠诲姟妯″紡: 鍙栬揣 + rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand)); + } else { // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓� Date now = new Date(); wrkMast.setWrkSts(3L); @@ -675,7 +1031,7 @@ log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); } } - } else if (wrkMast.getWrkSts() == 4) {//4.RGV鍙栬揣瀹屾垚 => 5.RGV鏀捐揣涓� + } else if (wrkMast.getWrkSts() == 14) {//4.RGV鍙栬揣瀹屾垚 => 5.RGV鏀捐揣涓� 14鍑哄簱瀹屾垚 if (rgvProtocol.getTaskNo1() == 0 || !rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue())) {//RGV蹇呴』鏈変换鍔′笖浠诲姟鍜屽綋鍓嶅伐浣滄。涓�鑷� continue; } diff --git a/src/main/java/com/zy/asrs/utils/RouteUtils.java b/src/main/java/com/zy/asrs/utils/RouteUtils.java index 90cbf42..2816909 100644 --- a/src/main/java/com/zy/asrs/utils/RouteUtils.java +++ b/src/main/java/com/zy/asrs/utils/RouteUtils.java @@ -12,11 +12,11 @@ // 姝e簭 public static final List<Integer> TRACK_POSITION_POSITIVE_SEQUENCE = new ArrayList<Integer>() {{ - add(1);add(2);add(3);add(4);add(5);add(6);add(7);add(8);add(9);add(10);add(11);add(12); + add(101);add(102);add(104);add(105);add(107);add(118);add(108);add(119);add(110);add(120);add(111);add(121);add(113);add(114);add(116);add(117); }}; // 鍙嶅簭 public static final List<Integer> TRACK_POSITION_REVERSE_SEQUENCE = new ArrayList<Integer>() {{ - add(12);add(11);add(10);add(9);add(8);add(7);add(6);add(5);add(4);add(3);add(2);add(1); + add(117);add(116);add(114);add(113);add(121);add(111);add(120);add(110);add(119);add(108);add(118);add(107);add(105);add(104);add(102);add(101); }}; public static String zerofill(String msg, Integer count){ @@ -35,7 +35,7 @@ // 鑾峰彇褰撳墠灏忚溅鏈璧扮殑璺嚎闆嗗悎 public static List<Integer> getRoute(Integer groupStart,Integer groupEnd){ - boolean sign = groupStart < groupEnd; + boolean sign = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(groupStart) < TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(groupEnd); List<Integer> result = new ArrayList<>(); List<Integer> groupRoute = null; if (sign){ @@ -97,9 +97,21 @@ } } + /* + * a 灏忚溅褰撳墠浣嶇疆 + * b 灏忚溅浠诲姟寮�濮嬩綅缃� + * c 灏忚溅浠诲姟缁撴潫浣嶇疆 + * sign 鍙︿竴涓皬杞︾┖闂叉爣璁� + * */ + public static boolean RouteAutoBoolean(Integer a,Integer b,Integer c,Integer aa,Integer bb,Integer cc,boolean idleOther){ + List<Integer> routeCurrent = getRouteIntersection(getRoute(a, c), getRoute(b, c), RouteCollectCountType.DEDUPLICATIONUNION);//骞堕泦 + List<Integer> routeOther = getRouteIntersection(getRoute(aa, cc), getRoute(bb, cc), RouteCollectCountType.DEDUPLICATIONUNION);// + return !getRouteBoolean(routeCurrent, routeOther); //鏄惁鏈変氦闆� + } + public static void main(String[] arge){ - List<Integer> routeCurrent = getRoute(2, 9); //鑾峰彇褰撳墠灏忚溅璺緞 - List<Integer> routeOther = getRoute(12, 5); //鑾峰彇鍏跺畠灏忚溅璺緞 + List<Integer> routeCurrent = getRoute(104, 119); //鑾峰彇褰撳墠灏忚溅璺緞 + List<Integer> routeOther = getRoute(117, 118); //鑾峰彇鍏跺畠灏忚溅璺緞 System.out.println("褰撳墠灏忚溅璺緞:\t"+routeCurrent); System.out.println("鍏跺畠灏忚溅璺緞:\t"+routeOther); @@ -117,6 +129,8 @@ List<Integer> routeIntersection3 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.DEDUPLICATIONUNION);//鍘婚噸骞堕泦 System.out.println("璺緞鍘婚噸骞堕泦锛歕t"+routeIntersection3); + + System.out.println(RouteAutoBoolean(101,104,119,114,116,120,true)); } } diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java index ab1cb60..91eb879 100644 --- a/src/main/java/com/zy/core/MainProcess.java +++ b/src/main/java/com/zy/core/MainProcess.java @@ -66,9 +66,10 @@ /////////////////////////////////////RGV璋冨害///////////////////////////////////// // //缁戝畾灏忚溅鏂规硶 -// mainService.rgvBindSte(); + mainService.rgvBindSte(); + mainService.rgvBindSte2(); // // 鍏ュ嚭搴� ===>> RGV鍏ュ嚭搴撲綔涓氫笅鍙� -// mainService.rgvIoExecute(); + mainService.rgvIoExecute(); // // RGV鍏ュ簱 ===>> 鏍规嵁RGV瀹屾垚淇″彿,鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣� // mainService.rgvFinished(); // // 鍏ュ嚭搴� ===>> RGV鍑哄簱绔欏埌绯荤粺鍏ュ嚭搴撶珯 diff --git a/src/main/java/com/zy/core/model/DevpSlave.java b/src/main/java/com/zy/core/model/DevpSlave.java index ad33be5..9cd578c 100644 --- a/src/main/java/com/zy/core/model/DevpSlave.java +++ b/src/main/java/com/zy/core/model/DevpSlave.java @@ -27,6 +27,10 @@ private List<Sta> pickSta = new ArrayList<>(); + private List<Sta> outRgvSta = new ArrayList<>(); + + private List<Sta> inRgvSta = new ArrayList<>(); + @Data public static class Sta { diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 620400c..8db6b40 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -269,6 +269,43 @@ pickSta[0]: staNo: 11 barcode: ${wcs-slave.barcode[0].id} + # Rgv鍑哄簱鍙�1 + outRgvSta[0]: + staNo: 102 + # Rgv鍑哄簱鍙�1 + outRgvSta[1]: + staNo: 105 + # Rgv鍑哄簱鍙�1 + outRgvSta[2]: + staNo: 108 + # Rgv鍑哄簱鍙�1 + outRgvSta[3]: + staNo: 111 + # Rgv鍑哄簱鍙�1 + outRgvSta[4]: + staNo: 114 + # Rgv鍑哄簱鍙�1 + outRgvSta[5]: + staNo: 117 + # Rgv鍏ュ簱鍙�1 + inRgvSta[0]: + staNo: 118 + # Rgv鍏ュ簱鍙�1 + inRgvSta[1]: + staNo: 119 + # Rgv鍏ュ簱鍙�1 + inRgvSta[2]: + staNo: 120 + # Rgv鍏ュ簱鍙�1 + inRgvSta[3]: + staNo: 121 + # Rgv鍏ュ簱鍙�1 + inRgvSta[4]: + staNo: 122 + # Rgv鍏ュ簱鍙�1 + inRgvSta[5]: + staNo: 123 + # 杈撻�佺嚎 devp[1]: id: 2 diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml index 3b7c168..b0937e5 100644 --- a/src/main/resources/mapper/WrkMastMapper.xml +++ b/src/main/resources/mapper/WrkMastMapper.xml @@ -247,6 +247,37 @@ and rgv_no is null </select> + <select id="selectWaitBindRgvNo2" resultMap="BaseResultMap"> + select * from dbo.asr_wrk_mast + where 1=1 + and wrk_sts in (2,14) + and (rgv_no IS NULL OR rgv_no = 0) + </select> + + <select id="selectWaitBindRGVRgvNo" resultMap="BaseResultMap"> + select * from dbo.asr_wrk_mast_rgv + where 1=1 + and wrk_sts < 110 + and rgv_no = #{rgvNo} + </select> + + <select id="selectWaitBindRgvNoOneWrkNo" resultMap="BaseResultMap"> + select * from dbo.asr_wrk_mast_rgv + where 1=1 + and wrk_no = #{wrkNo} + </select> + + <insert id="insertRgvMast"> + INSERT INTO dbo.asr_wrk_mast_rgv SELECT * FROM asr_wrk_mast WHERE wrk_no = #{wrkNo} + </insert> + + <update id="updateRgvMast"> + update asr_wrk_mast_rgv + set wrk_sts=100 + where 1=1 + and wrk_no = #{wrkNo} + </update> + <select id="selectRgvInSteWrkNo" resultMap="BaseResultMap"> select top 1 * from dbo.asr_wrk_mast where 1=1 and wrk_sts =12 and wrk_no=#{wrkNo} and rgv_no is null </select> -- Gitblit v1.9.1