From 0ae7648dae40c6b7efa15e276099da7a9213ad37 Mon Sep 17 00:00:00 2001 From: lty <876263681@qq.com> Date: 星期二, 23 九月 2025 22:13:13 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 2034 +++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 1,743 insertions(+), 291 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 b1dc376..655b13f 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -8,11 +8,18 @@ import com.core.common.DateUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.*; +import com.zy.asrs.entity.param.ArmOrderAssignmentParam; +import com.zy.asrs.entity.param.ArmTaskAssignmentParam; +import com.zy.asrs.entity.param.CombParam; +import com.zy.asrs.entity.result.OrderDetlValueResultUtil; import com.zy.asrs.mapper.*; import com.zy.asrs.service.*; +import com.zy.asrs.utils.PostMesDataUtils; import com.zy.asrs.utils.RouteUtils; import com.zy.asrs.utils.Utils; import com.zy.asrs.utils.VersionUtils; +import com.zy.asrs.utils.core.ReturnT; +import com.zy.common.constant.ArmConstant; import com.zy.common.model.LocTypeDto; import com.zy.common.model.MatDto; import com.zy.common.model.SearchLocParam; @@ -46,7 +53,6 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.util.*; -import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -94,9 +100,16 @@ private WrkMastService wrkMastService; @Autowired private BasRgvMapService basRgvMapService; + @Autowired + private BasArmService basArmService; + @Autowired + private BasArmMastService basArmMastService; @Value("${wms.url}") private String wmsUrl; + + @Value("${wms.comb}") + private String wmsComb; @Value("${inventory.number}") private Integer inventoryNumber; @@ -748,9 +761,10 @@ continue; } // 鍒ゆ柇宸ヤ綔妗f潯浠� - if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) { + if ((wrkMast.getIoType() != 12 && wrkMast.getIoType() < 100) || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) { continue; } + // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗� CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo()); CrnProtocol crnProtocol = crnThread.getCrnProtocol(); @@ -802,8 +816,112 @@ } /** - * 鍏ュ嚭搴� ===>> 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 + * 鍫嗗灈鏈轰换鍔¤鎺ヤ换鍔$敓鎴� */ + public synchronized void connectWrk(Integer mark) { + for (DevpSlave devp : slaveProperties.getDevp()) { + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + StaProtocol staProtocolIn = devpThread.getStation().get(4001); + if (staProtocolIn == null) { + continue; + } else { + staProtocolIn = staProtocolIn.clone(); + } + int[] outStaNos = {1015, 2016}; + for (int outStaNo : outStaNos) { + StaProtocol staProtocolOut = devpThread.getStation().get(outStaNo);// 鐩樼偣鍑哄簱琛旀帴绔欑偣锛堝彲鑳芥槸 1015锛屼篃鍙兘鏄� 2016锛� + if (staProtocolOut == null) { + continue; + } else { + staProtocolOut = staProtocolOut.clone(); + } + + if (staProtocolOut.getWorkNo() != null && staProtocolOut.getStaNo() == 4006) { + WrkMast wrkMastOut = wrkMastMapper.selectByWrkNo(staProtocolOut.getWorkNo()); + WrkMast wrkMast = wrkMastMapper.selectByWrkNo(9997); + if (wrkMastOut == null) { + continue; + } + if (wrkMast != null) { + News.info("宸插瓨鍦ㄦ枩琛椾换鍔★紝绛夊緟浠诲姟瀹屾垚"); + continue; + } + try { + TransplantWork param = new TransplantWork(); + param.setWorkNo(wrkMastOut.getWrkNo()); + param.setBarcode(wrkMastOut.getBarcode()); + param.setSourceStaNo(outStaNo); + param.setStaNo(wrkMastOut.getStaNo()); + + String response = new HttpHandler.Builder() + .setUri(wmsUrl) + .setPath("/rpc/auto/TransplantingOut/v1") + .setJson(JSON.toJSONString(param)) + .build() + .doPost(); + + JSONObject jsonObject = JSON.parseObject(response); + if (jsonObject.getInteger("code").equals(200)) { + staProtocolOut.setWorkNo(9997); + devpThread.setPakMk(staProtocolOut.getSiteId(), false); + boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocolOut)); + + if (!result) { + throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); + } + } + } catch (Exception e) { + e.printStackTrace(); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + } + } + if(staProtocolIn.getWorkNo() != null &&staProtocolIn.getStaNo() != 4001){ + WrkMast wrkMastIn = wrkMastMapper.selectByWrkNo(staProtocolIn.getWorkNo()); + WrkMast wrkMast = wrkMastMapper.selectByWrkNo(9996); + if(wrkMastIn == null){ + continue; + } + if(wrkMast != null){ + News.info("宸插瓨鍦ㄦ枩琛椾换鍔★紝绛夊緟浠诲姟瀹屾垚"); + continue; + } + try { + TransplantWork param = new TransplantWork(); + param.setWorkNo(wrkMastIn.getWrkNo()); + param.setBarcode(wrkMastIn.getBarcode()); + param.setSourceStaNo(4001); + param.setStaNo(wrkMastIn.getStaNo()); + String response = new HttpHandler.Builder() + .setUri(wmsUrl) + .setPath("/rpc/auto/TransplantingIn/v1") + .setJson(JSON.toJSONString(param)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + if (jsonObject.getInteger("code").equals(200)) { + staProtocolIn.setWorkNo(9996); + devpThread.setPakMk(staProtocolIn.getSiteId(), false); + boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocolIn)); + + if (!result) { + throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); + } + } + + } catch (Exception e) { + e.printStackTrace(); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + } + } + + } + + + /** + * 鍏ュ嚭搴� ===>> 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 + */ public synchronized void crnIoExecute(Integer mark) { for (CrnSlave crn : slaveProperties.getCrn()) { @@ -929,6 +1047,61 @@ continue; } else { staProtocol = staProtocol.clone(); + } + if (slave.getId() == 3) { + SiemensDevpThread devpThread1 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); + StaProtocol staProtocol2 = devpThread1.getStation().get(4001); + if (staProtocol2 == null) { + News.infoNoLog("" + mark + " - 2" + " - 3" + " - 鍫嗗灈鏈哄嚭搴撶珯淇℃伅(staProtocol!=null缁х画鎵ц,鍚﹀垯寰幆缁堟)锛歴taProtocol=" + staProtocol2); + break; + } else { + staProtocol2 = staProtocol2.clone(); + } + WrkMast wrkMast9999 = wrkMastMapper.selectByWrkNo(9996); + BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); + if (staDetl == null) { + News.error(""+mark+" - 2"+" - 5"+" - 鍑哄簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo()); + break; +// continue; + } + if(wrkMast9999 != null && staProtocol2.isAutoing() && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")){ + // 鍫嗗灈鏈烘帶鍒惰繃婊� + if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { +// continue; + break; + } + // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊� + if (wrkMastMapper.selectWorking(slave.getId()) != null) { + break; +// return; + } + // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔� + CrnCommand crnCommand = new CrnCommand(); + crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙� + crnCommand.setTaskNo((short) 9996); // 宸ヤ綔鍙� +// crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� + crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 + crnCommand.setSourcePosX((short) 5); // 婧愬簱浣嶆帓 + crnCommand.setSourcePosY((short) 1); // 婧愬簱浣嶅垪 + crnCommand.setSourcePosZ((short) 4); // 婧愬簱浣嶅眰 + crnCommand.setDestinationPosX((short) 6); // 鐩爣搴撲綅鎺� + crnCommand.setDestinationPosY((short) 1); // 鐩爣搴撲綅鍒� + crnCommand.setDestinationPosZ((short) 1); // 鐩爣搴撲綅灞� +// crnCommand.setTraySize(sourceSta.getLocType1() == 2); //搴撲綅绫诲瀷 + if (!MessageQueue.offer(SlaveType.Crn, wrkMast9999.getCrnNo(), new Task(2, crnCommand))) { + News.error("" + mark + " - 2" + " - 13" + " - 鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast9999.getCrnNo(), JSON.toJSON(crnCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� + Date now = new Date(); + wrkMast9999.setWrkSts(3L); + wrkMast9999.setCrnStrTime(now); + wrkMast9999.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast9999) == 0) { + News.error("" + mark + " - 2" + " - 14" + " - 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast9999.getWrkNo()); + } + break; + } + } } // 鏌ヨ绔欑偣璇︾粏淇℃伅 BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); @@ -1074,6 +1247,61 @@ // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗� // WrkMast wrkMast = wrkMastMapper.selectPakOutStep1(slave.getId(), crnStn.getStaNo()); List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo()); + if (slave.getId() == 3) { + SiemensDevpThread devpThread1 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); + StaProtocol staProtocol2 = devpThread1.getStation().get(1015); + if (staProtocol2 == null) { + News.infoNoLog("" + mark + " - 2" + " - 3" + " - 鍫嗗灈鏈哄嚭搴撶珯淇℃伅(staProtocol!=null缁х画鎵ц,鍚﹀垯寰幆缁堟)锛歴taProtocol=" + staProtocol2); + break; + } else { + staProtocol2 = staProtocol2.clone(); + } + WrkMast wrkMast9999 = wrkMastMapper.selectByWrkNo(9997); + BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); + if (staDetl == null) { + News.error(""+mark+" - 2"+" - 5"+" - 鍑哄簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo()); + break; +// continue; + } + if(wrkMast9999 != null && staProtocol2.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")){ + // 鍫嗗灈鏈烘帶鍒惰繃婊� + if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { +// continue; + break; + } + // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊� + if (wrkMastMapper.selectWorking(slave.getId()) != null) { + break; +// return; + } + // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔� + CrnCommand crnCommand = new CrnCommand(); + crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙� + crnCommand.setTaskNo((short) 9997); // 宸ヤ綔鍙� +// crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� + crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 + crnCommand.setSourcePosX((short) 5); // 婧愬簱浣嶆帓 + crnCommand.setSourcePosY((short) 1); // 婧愬簱浣嶅垪 + crnCommand.setSourcePosZ((short) 1); // 婧愬簱浣嶅眰 + crnCommand.setDestinationPosX((short) 6); // 鐩爣搴撲綅鎺� + crnCommand.setDestinationPosY((short) 1); // 鐩爣搴撲綅鍒� + crnCommand.setDestinationPosZ((short) 4); // 鐩爣搴撲綅灞� +// crnCommand.setTraySize(sourceSta.getLocType1() == 2); //搴撲綅绫诲瀷 + if (!MessageQueue.offer(SlaveType.Crn, wrkMast9999.getCrnNo(), new Task(2, crnCommand))) { + News.error("" + mark + " - 2" + " - 13" + " - 鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast9999.getCrnNo(), JSON.toJSON(crnCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� + Date now = new Date(); + wrkMast9999.setWrkSts(12L); + wrkMast9999.setCrnStrTime(now); + wrkMast9999.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast9999) == 0) { + News.error("" + mark + " - 2" + " - 14" + " - 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast9999.getWrkNo()); + } + break; + } + } + } for (WrkMast wrkMast : wrkMasts) { if (wrkMast == null) { continue; @@ -1126,11 +1354,11 @@ if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") ) { - if (slave.getId() == 1 || slave.getId() == 2){ - if (staProtocol.isLoading() || staProtocol.getWorkNo() != 0 || !staProtocol.isOutEnable()){ - continue; - } - } +// if (slave.getId() == 1 || slave.getId() == 2){ +// if (staProtocol.isLoading() || staProtocol.getWorkNo() != 0 || !staProtocol.isOutEnable()){ +// continue; +// } +// } // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- // 鍫嗗灈鏈烘帶鍒惰繃婊� @@ -1438,14 +1666,50 @@ if (crnProtocol == null) { continue; } - // 鐘舵�侊細绛夊緟纭 骞朵笖 浠诲姟瀹屾垚浣� = 1 - if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) { - News.warnNoLog(""+mark+" - 0"+" - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔锛屼换鍔″彿:"+crnProtocol.getTaskNo()); + if(crnProtocol.getTaskNo() == 9999){ + // 鐘舵�侊細绛夊緟纭 骞朵笖 浠诲姟瀹屾垚浣� = 1 + if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) { + News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔锛屼换鍔″彿:" + crnProtocol.getTaskNo()); + + + + // 鍫嗗灈鏈哄浣� + News.warnNoLog("" + mark + " - 2" + " - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿={}", crnThread.getCrnProtocol().getCrnNo()); + crnThread.setResetFlag(true); + } + } else if (crnProtocol.getTaskNo() == 9996) {//鐩樼偣鍏ュ簱琛旀帴 + // 鐘舵�侊細绛夊緟纭 骞朵笖 浠诲姟瀹屾垚浣� = 1 + if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) { + News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔锛屼换鍔″彿:" + crnProtocol.getTaskNo()); // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。 WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue()); - if (wrkMast == null) { - News.error(""+mark+" - 1"+" - 鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo()); + // 鍏ュ簱 + 搴撲綅杞Щ ==> 4.鍏ュ簱瀹屾垚 + if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) { + wrkMast.setWrkSts(4L); + } else { + continue; + } + Date now = new Date(); + wrkMast.setCrnEndTime(now); + wrkMast.setModiTime(now); + // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 + if (wrkMastMapper.updateById(wrkMast) > 0) { + // 鍫嗗灈鏈哄浣� + log.error(wrkMast.getWrkNo() + "浠诲姟淇敼鐘舵��4鎴愬姛锛屽浣嶅爢鍨涙満={}", crnThread.getCrnProtocol().getCrnNo()); + News.warnNoLog("" + mark + " - 2" + " - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿={}", crnThread.getCrnProtocol().getCrnNo()); + crnThread.setResetFlag(true); + } + } + }else{ + // 鐘舵�侊細绛夊緟纭 骞朵笖 浠诲姟瀹屾垚浣� = 1 + if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) { + News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔锛屼换鍔″彿:" + crnProtocol.getTaskNo()); + + // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。 + WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue()); + if (wrkMast == null ) { + News.error("" + mark + " - 1" + " - 鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo()); continue; } // 鍏ュ簱 + 搴撲綅杞Щ ==> 4.鍏ュ簱瀹屾垚 @@ -1460,16 +1724,19 @@ // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 if (wrkMastMapper.updateById(wrkMast) > 0) { // 鍫嗗灈鏈哄浣� - log.error(wrkMast.getWrkNo()+"浠诲姟淇敼鐘舵��4鎴愬姛锛屽浣嶅爢鍨涙満={}",crnThread.getCrnProtocol().getCrnNo()); - News.warnNoLog(""+mark+" - 2"+" - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿={}",crnThread.getCrnProtocol().getCrnNo()); + log.error(wrkMast.getWrkNo() + "浠诲姟淇敼鐘舵��4鎴愬姛锛屽浣嶅爢鍨涙満={}", crnThread.getCrnProtocol().getCrnNo()); + News.warnNoLog("" + mark + " - 2" + " - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿={}", crnThread.getCrnProtocol().getCrnNo()); crnThread.setResetFlag(true); } } + } + } // News.infoNoLog(""+mark+" - 0"+" - 瀵瑰伐浣滄。鐨勫畬鎴愭搷浣滄墽琛屽畬鎴�"); } + /** * 鍫嗗灈鏈哄紓甯镐俊鎭褰� @@ -2295,16 +2562,20 @@ public synchronized void autoEmptyOut() { SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); List<Integer> list = new ArrayList<>(); - list.add(1108);list.add(112); - Map<Integer,Integer> map = new HashMap<>(); - map.put(101,102);map.put(112,111); + list.add(1108);list.add(2031); for (Integer site:list){ - WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("sta_no", map.get(site))); - if (!Cools.isEmpty(wrkMast)){ + Integer emptyCount = wrkMastMapper.countPakOutEmpty(site); + StaProtocol staProtocol = null; + if(emptyCount >= 2 && site == 1108){ + continue; + }else if(emptyCount == 1 && site == 2031){ continue; } //濡傛灉绔欑偣鍙嚭绂佺敤锛屽垯涓嶇敓鎴愮┖鐩樺嚭搴撲换鍔� - StaProtocol staProtocol = devpThread.getStation().get(site); + switch (site){ + case 1108:staProtocol = devpThread.getStation().get(site - 2);break; + case 2031:staProtocol = devpThread.getStation().get(site);break; + } if (staProtocol == null) { return; } else { @@ -2315,10 +2586,6 @@ && staProtocol.isOutEnable() //鍙嚭淇″彿 && staProtocol.getWorkNo() == 0 ) { - WrkMast pakoutEmpty = wrkMastMapper.selectPakoutEmpty(site); - if (null != pakoutEmpty) { - return; - } Short loctype1 = 1; LocTypeDto locTypeDto = new LocTypeDto(loctype1, (short) 1, (short) 1); locTypeDto.setSiteId(site); @@ -2458,13 +2725,15 @@ // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤 if (rgvProtocol.getStatusType() == RgvStatusType.IDLE && rgvProtocol.getModeType() == RgvModeType.AUTO - && rgvProtocol.getLoaded1()==0 //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴 - && (rgvProtocol.getTaskNo1()==0) + && !rgvProtocol.isLoaded1ing() //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴 + && rgvProtocol.getTaskNo1()==0 + && !rgvProtocol.isLoaded2ing() + && rgvProtocol.getTaskNo2()==0 &&rgvThread.isPakMk() ) { BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); - Integer rgvNoOther = basRgvMap.getRgvNoOther(rgvProtocol.getRgvNo()); + Integer rgvNoOther = basRgvMap.getRgvNoOther((int) rgvProtocol.getRgvNo()); RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNoOther); RgvProtocol rgvProtocolOther = rgvThreadOther.getRgvProtocol(); if (rgvProtocolOther == null) { @@ -2474,8 +2743,10 @@ } if (rgvProtocolOther.getStatusType() == RgvStatusType.IDLE && rgvProtocolOther.getModeType() == RgvModeType.AUTO - && rgvProtocolOther.getLoaded1()==0 - && (rgvProtocolOther.getTaskNo1()==0) + && !rgvProtocolOther.isLoaded1ing() + && rgvProtocolOther.getTaskNo1()==0 + && !rgvProtocolOther.isLoaded2ing() + && rgvProtocolOther.getTaskNo2()==0 &&rgvThreadOther.isPakMk() ){ //瀵瑰伐浣滄。杩涜鍒ゆ柇 @@ -2519,7 +2790,56 @@ // } // } + /** + * 灏忚溅涓婂伐浣嶅乏鍙崇Щ鍔� + * + */ + public synchronized boolean rgvStaMove(Long workNo) { + try { + for (RgvSlave rgv : slaveProperties.getRgv()) { + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + } else { + rgvProtocol = rgvProtocol.clone(); + } + if(rgvProtocol.isLoaded2ing() && rgvProtocol.isLoaded1ing()){ + continue; + } + if(rgvProtocol.isLoaded1ing() && !rgvProtocol.isLoaded2ing() && rgvProtocol.getTaskNo1() != 0){ + WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1()); + Short moveSta =0; + if(wrkMastSta.getStaEnd()< 1036 || (2000 < wrkMastSta.getStaEnd() && wrkMastSta.getStaEnd()<2031)){ + moveSta = 2; + boolean rgvComplete = rgvComplete3((int) rgvProtocol.getRgvNo(),7,wrkMastSta.getWrkNo(),moveSta); + if (!rgvComplete){ + log.error("灏忚溅宸ヤ綅绉诲姩澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo()); + break; + } + } + } + if(!rgvProtocol.isLoaded1ing() && rgvProtocol.isLoaded2ing() && rgvProtocol.getTaskNo2() != 0){ + WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2()); + Short moveSta =0; + + if(wrkMastSta.getStaEnd()> 2030 || (1036 < wrkMastSta.getStaEnd() && wrkMastSta.getStaEnd()<2000)){ + moveSta = 1; + boolean rgvComplete = rgvComplete3((int) rgvProtocol.getRgvNo(),8,wrkMastSta.getWrkNo(),moveSta); + if (!rgvComplete){ + log.error("灏忚溅宸ヤ綅绉诲姩澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo()); + break; + } + } + } + + + } + }catch (Exception e){ + log.error("灏忚溅澶嶄綅绾跨▼鎶ラ敊锛�"+e); + } + } /** * 瀹屾垚灏忚溅浠诲姟 */ @@ -2527,112 +2847,251 @@ try{ for (DevpSlave devp : slaveProperties.getDevp()) { List<BasRgvMap> basRgvMaps = basRgvMapService.selectList(new EntityWrapper<>()); - for (BasRgvMap rgvSlave:basRgvMaps) { - RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getRgvNo()); + for (RgvSlave rgv : slaveProperties.getRgv()) { + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); if (rgvProtocol == null) { continue; }else { rgvProtocol = rgvProtocol.clone(); } - BasRgv basRgv = basRgvService.selectById(rgvSlave.getRgvNo()); + BasRgv basRgv = basRgvService.selectById(rgv.getId()); if (basRgv == null) { - log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�3", rgvSlave.getRgvNo()); + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�3", rgv.getId()); continue; } + //鏀捐揣纭 + if(rgvProtocol.getStatusType1()==RgvStatusType.FETCHWAITING && rgvProtocol.getModeType() == RgvModeType.AUTO){ + boolean rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(), 3); + if (!rgvComplete){ + log.error("灏忚溅鏀捐揣澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�", rgvProtocol.getRgvNo()); + } + } + if(rgvProtocol.getStatusType2()==RgvStatusType.FETCHWAITING && rgvProtocol.getModeType() == RgvModeType.AUTO){ + boolean rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(), 6); + if (!rgvComplete){ + log.error("灏忚溅鏀捐揣澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�", rgvProtocol.getRgvNo()); + } + } - // 鍙湁褰揜GV绛夊緟WCS纭銆佽嚜鍔� - if ((rgvProtocol.getStatusType1() == RgvStatusType.WAITING || rgvProtocol.getStatusType1()==RgvStatusType.FETCHWAITING) + // 鍙湁褰揜GV宸ヤ綅1绛夊緟WCS纭銆佽嚜鍔� + if (rgvProtocol.getStatusType1() == RgvStatusType.WAITING && rgvProtocol.getModeType() == RgvModeType.AUTO - && (rgvProtocol.getStatusType() == RgvStatusType.WORKING1) ){ - log.info("{}鍙峰皬杞︾瓑寰厀cs纭锛岀姸鎬亄}锛屽弬鏁皗}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol); - if (rgvProtocol.getTaskNo1()!=0){ -// if (rgvProtocol.getTaskNo1()==32222){ -// boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); -// if (!rgvComplete){ -// log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo()); -// } -// BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); -// basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); -// rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute(),"2415"); -// rgvThread.setPakMk(true); -// break; -// } - WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1().intValue()); - if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getWrkSts()!=1){ - log.error("鏈煡鍒板皬杞︽墽琛屼换鍔℃垨鑰呮墽琛屼换鍔$姸鎬佷笉绗﹀悎锛�"+wrkMastSta); - continue; + + log.info("{}鍙峰皬杞︾瓑寰厀cs纭锛岀姸鎬亄}锛屽弬鏁皗}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType1(),rgvProtocol); + if(rgvProtocol.getTaskNo1() == 9999){ // 棰勮皟搴︿换鍔$‘璁� + BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); + Integer staNo = basRgvMap.getNowRoute(); + switch (staNo){ + case 1004: staNo = 1042; break; + case 1007: staNo = 1105; break; } SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); - StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); - if (staProtocol == null) { - continue; - } else { - staProtocol = staProtocol.clone(); - } - if (!staProtocol.isAutoing() || !staProtocol.isLoading()){ - continue; - } - WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); - if (!Cools.isEmpty(wrkMast)){ - if (!staProtocol.isPakMk()){ - continue; - } - // 涓嬪彂绔欑偣淇℃伅 - staProtocol.setWorkNo(wrkMast.getWrkNo()); - staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); - devpThread.setPakMk(staProtocol.getSiteId(), false); - log.error("rgv浠诲姟瀹屾垚缁欒緭閫佺嚎涓嬪彂鍛戒护锛�"+wrkMast.getWrkNo()+","+wrkMast.getStaNo()); - if (!MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol))) { - continue; + StaProtocol staProtocol = devpThread.getStation().get(staNo); + boolean rgvComplete = false; + +// long now = System.currentTimeMillis(); +// if (staProtocol.isLoading()) { +// rgvProtocol.setLoadingStartTime(null); // 宸插埌浣嶏紝娓呯┖鏃堕棿鎴� +// } else { +// if (rgvProtocol.getLoadingStartTime() == null) { +// rgvProtocol.setLoadingStartTime(now); +// } +// } + + if (staProtocol.isLoading()) { + rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(), 3); + if (!rgvComplete){ + log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛佺瓑寰呭叆搴撳彇璐�", rgvProtocol.getRgvNo()); } } -// else { -// log.error("rgv浠诲姟瀹屾垚缁欒緭閫佺嚎涓嬪彂鍛戒护,浣嗘湭鏌ヨ鍒板伐浣滄。"); + } + if ( rgvProtocol.getTaskNo1()!=9999){ + WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1()); + if(null == wrkMastSta){ + log.error("灏忚溅鏃犱换鍔�"); + continue; + } + if(wrkMastSta.getWrkSts() == 1){//鍙栬揣纭 + if(!Objects.equals(rgvProtocol.getRgvPosI2(), wrkMastSta.getStaEnd())){ + continue; + } + wrkMastSta.setUpdateTime(new Date()); + wrkMastSta.setWrkSts(2); +// wrkMastSta.setWorkSta(2); + try{ + wrkMastStaMapper.updateById(wrkMastSta); + log.error("鏇存柊灏忚溅浠诲姟鎴愬姛"); + }catch (Exception e){ + log.error("鏇存柊灏忚溅浠诲姟澶辫触"); + } + boolean rgvComplete = false; + + rgvComplete = rgvStaMove(wrkMastSta.getWrkNo()); + if (!rgvComplete){ + log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo()); + break; + } + break; + } +// if(wrkMastSta.getWrkSts() == 4){//琛岃蛋纭 +// wrkMastSta.setWrkSts(2); +// try{ +// wrkMastStaMapper.updateById(wrkMastSta); +// log.error("鏇存柊灏忚溅浠诲姟鎴愬姛"); +// }catch (Exception e){ +// log.error("鏇存柊灏忚溅浠诲姟澶辫触"); +// } +// boolean rgvComplete = false; +// +// rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(),7); +// if (!rgvComplete){ +// log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo()); +// break; +// } +// break; +// } +// if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getWrkSts()!=1){ +// log.error("鏈煡鍒板皬杞︽墽琛屼换鍔℃垨鑰呮墽琛屼换鍔$姸鎬佷笉绗﹀悎锛�"+wrkMastSta); +// continue; +// } +// +// SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); +// StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); +// if (staProtocol == null) { +// continue; +// } else { +// staProtocol = staProtocol.clone(); +// } +// if (!staProtocol.isAutoing() || !staProtocol.isLoading()){ +// continue; +// } +// WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); +// if (!Cools.isEmpty(wrkMast)){ +// if (!staProtocol.isPakMk()){ +// continue; +// } // // 涓嬪彂绔欑偣淇℃伅 -// Map<Integer,Integer> map = new HashMap<>(); -// map.put(101,102);map.put(112,111); -// map.put(100,100); -// staProtocol.setWorkNo(rgvProtocol.getTaskNo1().intValue()); -// staProtocol.setStaNo(map.get(rgvProtocol.getRgvPosI()).shortValue()); +// staProtocol.setWorkNo(wrkMast.getWrkNo()); +// staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); // devpThread.setPakMk(staProtocol.getSiteId(), false); -//// log.error("rgv浠诲姟瀹屾垚缁欒緭閫佺嚎涓嬪彂鍛戒护锛�"+wrkMast.getWrkNo()+","+wrkMast.getStaNo()); +// log.error("rgv浠诲姟瀹屾垚缁欒緭閫佺嚎涓嬪彂鍛戒护锛�"+wrkMast.getWrkNo()+","+wrkMast.getStaNo()); // if (!MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol))) { // continue; // } // } - int sourceSta = wrkMast.getSourceStaNo(); - boolean rgvComplete = false; - - //鍙屽伐浣嶅嚭鍏ュ簱涓嶅悓宸ヤ綅澶嶄綅 - if((sourceSta >= 1001 && sourceSta <= 1035) || (sourceSta >= 2001 && sourceSta <= 2030)){ - rgvComplete = rgvComplete(rgvProtocol.getRgvNo(),6); - }else{ - rgvComplete = rgvComplete(rgvProtocol.getRgvNo(),3); - - } - if (!rgvComplete){ - log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo()); - break; - } - WrkMast wrkMast1 = wrkMastService.selectByWrkNo(rgvProtocol.getTaskNo1().intValue()); - wrkMast1.setPdcType("Y"); - - wrkMastService.updateById(wrkMast1); - - wrkMastSta.setWrkSts(3); - wrkMastStaMapper.updateById(wrkMastSta); - BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); - basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); - rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute(),"2471"); - rgvThread.setPakMk(true); +// boolean rgvComplete = false; +// +// rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(),3); +// if (!rgvComplete){ +// log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo()); +// break; +// } +// WrkMast wrkMast1 = wrkMastService.selectByWrkNo(rgvProtocol.getTaskNo1()); +// wrkMast1.setPdcType("Y"); +// +// wrkMastService.updateById(wrkMast1); +// +// wrkMastSta.setWrkSts(3); +// wrkMastStaMapper.updateById(wrkMastSta); +// BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); +// basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); +// rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute(),"2471"); } else { log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{},绛夊緟wcs纭浣嗘槸娌℃湁宸ヤ綔鍙凤紒",rgvProtocol.getRgvNo()); } + } + // 鍙湁褰揜GV宸ヤ綅2绛夊緟WCS纭銆佽嚜鍔� + if (rgvProtocol.getStatusType2() == RgvStatusType.WAITING + && rgvProtocol.getModeType() == RgvModeType.AUTO + ){ + log.info("{}鍙峰皬杞︾瓑寰厀cs纭锛岀姸鎬亄}锛屽弬鏁皗}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType2(),rgvProtocol); + if (rgvProtocol.getTaskNo2() !=0 ){ + WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2()); + if(wrkMastSta.getWrkSts() == 1){//鍙栬揣纭 + boolean rgvComplete = false; + rgvComplete = rgvComplete2((int) rgvProtocol.getRgvNo(),8,wrkMastSta.getWrkNo()); + if (!rgvComplete){ + log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo()); + break; + } + wrkMastSta.setWrkSts(2); + try{ + wrkMastStaMapper.updateById(wrkMastSta); + log.error("鏇存柊灏忚溅浠诲姟鎴愬姛"); + }catch (Exception e){ + log.error("鏇存柊灏忚溅浠诲姟澶辫触"); + } + break; + } +// if(wrkMastSta.getWrkSts() == 4){//琛岃蛋鍚庣‘璁� +// wrkMastSta.setWrkSts(2); +// try{ +// wrkMastStaMapper.updateById(wrkMastSta); +// log.error("鏇存柊灏忚溅浠诲姟鎴愬姛"); +// }catch (Exception e){ +// log.error("鏇存柊灏忚溅浠诲姟澶辫触"); +// } +// boolean rgvComplete = false; +// +// rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(),7); +// if (!rgvComplete){ +// log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo()); +// break; +// } +// break; +// } +// if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getWrkSts()!=1){ +// log.error("鏈煡鍒板皬杞︽墽琛屼换鍔℃垨鑰呮墽琛屼换鍔$姸鎬佷笉绗﹀悎锛�"+wrkMastSta); +// continue; +// } + +// SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); +// StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); +// if (staProtocol == null) { +// continue; +// } else { +// staProtocol = staProtocol.clone(); +// } +// if (!staProtocol.isAutoing() || !staProtocol.isLoading()){ +// continue; +// } +// WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); +// +// int sourceSta = wrkMast.getSourceStaNo(); +// boolean rgvComplete = false; +// +// //鍙屽伐浣嶅嚭鍏ュ簱涓嶅悓宸ヤ綅澶嶄綅 +// rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(),6); + +// if (!rgvComplete){ +// log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo()); +// break; +// } +// WrkMast wrkMast1 = wrkMastService.selectByWrkNo(rgvProtocol.getTaskNo1()); +// wrkMast1.setPdcType("Y"); +// +// wrkMastService.updateById(wrkMast1); +// +// wrkMastSta.setWrkSts(3); +// wrkMastStaMapper.updateById(wrkMastSta); +// BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); +// basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); +// rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute(),"2471"); + } + else { + log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{},绛夊緟wcs纭锛�",rgvProtocol.getRgvNo()); + } + } + //褰撳皬杞︽棤浠诲姟鏃跺彇娑堥攣瀹� + if(rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0){ + rgvThread.setPakMk(true); + rgvThread.setPakIn(true); + rgvThread.setPakOut(true); } } } @@ -2640,11 +3099,612 @@ log.error("灏忚溅澶嶄綅绾跨▼鎶ラ敊锛�"+e); } } + + /** + * rgv鏀捐揣浠诲姟涓嬪彂 + */ + public synchronized void rgvOutExecute() { + for (RgvSlave rgv : slaveProperties.getRgv()) { + // 鑾峰彇RGV淇℃伅 + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + } + BasRgv basRgv = basRgvService.selectById(rgv.getId()); + if (basRgv == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�4", rgv.getId()); + continue; + } + //灏忚溅鏃犱换鍔℃椂璺宠繃 +// if(rgvProtocol.getTaskNo1() ==0 && rgvProtocol.getTaskNo2() == 0){ +// continue; +// } + //鍏ュ簱鏀捐揣 + if(rgvThread.isPakIn()){ + for(RgvSlave.RgvStn rgvStn : rgv.getRgvInPStn()){//鍏ュ簱鏀捐揣绔欑偣 + boolean flag = false; + + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(rgvStn.getStaNo()); + if (staProtocol == null) { + News.infoNoLog( " - 1" + " - 1" + " - Rgv鍏ュ簱鏀捐揣绔欎俊鎭�(staProtocol!=null缁х画鎵ц)锛歴taProtocol=" + staProtocol); + continue; + } else { + staProtocol = staProtocol.clone(); + } + // 鏌ヨ绔欑偣璇︾粏淇℃伅 + BasDevp staDetl = basDevpService.selectById(rgvStn.getStaNo()); + if (staDetl == null) { + News.error( " - 1" + " - 2" + " - 鍏ュ簱 ===>>Rgv鏀捐揣绔欑偣鍦ㄦ暟鎹簱涓嶅瓨鍦�, 绔欑偣缂栧彿={}", rgvStn.getStaNo()); + continue; + } + + if (staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.isInEnable() + && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) { + flag = true; + } + if (!flag) { + News.errorNoLog( " - 1" + " - 3" + " - Rgv鍏ュ簱鏀捐揣绔欎俊鎭�(浠ヤ笅闇�瑕佸叏true):" + + "鑷姩淇″彿" + staProtocol.isAutoing() + "鏈夌墿淇″彿" + staProtocol.isLoading() + + "宸ヤ綔鍙�>0" + staProtocol.getWorkNo() + "鍙叆淇″彿" + staProtocol.isInEnable() + + "鑳藉叆淇″彿锛坵ms璁剧疆锛�.equals(\"Y\")" + staDetl.getCanining()); + continue; + } + BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); +// List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); + basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙� +// Integer wrkNo = 0; + if(rgvProtocol.getTaskNo2() != 0){ + wrkNo = rgvProtocol.getTaskNo2(); + } +// else{ +// wrkNo = rgvProtocol.getTaskNo1(); +// } + if(!rgvProtocol.isLoaded2ing()){ + continue; + } + WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2());//鏍规嵁绔欑偣宸ヤ綔鍙峰拰灏忚溅宸ヤ綔鑼冨洿妫�绱换鍔℃。 + if( null == wrkMastSta ) { + News.infoNoLog( " - 1" + " - 4" + " - 鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts0, 宸ヤ綔鍙�={}", staProtocol.getWorkNo()); + continue; + } + if(!Objects.equals(rgvProtocol.getRgvPosI2(), wrkMastSta.getStaEnd())){ + continue; + } + + boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,null,2); //鍛戒护涓嬪彂 + if (sign){ + try{ + wrkMastSta.setWrkSts(3); + wrkMastStaMapper.updateById(wrkMastSta); + log.error("鏇存柊灏忚溅浠诲姟鎴愬姛"); + }catch (Exception e){ + log.error("鏇存柊灏忚溅浠诲姟澶辫触"); + } +// boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526"); +// if (!signMap){ +// log.error("璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo()); +// } + } else { + log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo()); + } + + } + } + //鍑哄簱鏀捐揣 + if( rgvThread.isPakOut()){ + for(RgvSlave.RgvStn rgvStn : rgv.getRgvOutPStn()){//鍏ュ簱鏀捐揣绔欑偣 + boolean flag = false; + + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(rgvStn.getStaNo()); + if (staProtocol == null) { + News.infoNoLog( " - 1" + " - 1" + " - Rgv鍑哄簱鏀捐揣绔欎俊鎭�(staProtocol!=null缁х画鎵ц)锛歴taProtocol=" + staProtocol); + continue; + } else { + staProtocol = staProtocol.clone(); + } + // 鏌ヨ绔欑偣璇︾粏淇℃伅 + BasDevp staDetl = basDevpService.selectById(rgvStn.getStaNo()); + if (staDetl == null) { + News.error( " - 1" + " - 2" + " - 鍑哄簱 ===>>Rgv鏀捐揣绔欑偣鍦ㄦ暟鎹簱涓嶅瓨鍦�, 绔欑偣缂栧彿={}", rgvStn.getStaNo()); + continue; + } + + if (staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.isOutEnable() + && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) { + flag = true; + } + if (!flag) { + News.errorNoLog( " - 1" + " - 3" + " - Rgv鍑哄簱鏀捐揣绔欎俊鎭�(浠ヤ笅闇�瑕佸叏true):" + + "鑷姩淇″彿" + staProtocol.isAutoing() + "鏈夌墿淇″彿" + staProtocol.isLoading() + + "宸ヤ綔鍙�>0" + staProtocol.getWorkNo() + "鍙叆淇″彿" + staProtocol.isOutEnable() + + "鑳藉叆淇″彿锛坵ms璁剧疆锛�.equals(\"Y\")" + staDetl.getCanouting()); + continue; + } + BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); + basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙� +// Integer wrkNo = 0; + if(rgvProtocol.getTaskNo1() != 0){ + wrkNo = rgvProtocol.getTaskNo1(); + } +// else{ +// wrkNo = rgvProtocol.getTaskNo2(); +// } + WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1());//鏍规嵁绔欑偣宸ヤ綔鍙峰拰灏忚溅宸ヤ綔鑼冨洿妫�绱换鍔℃。 + + if( null == wrkMastSta ) { + News.infoNoLog( " - 1" + " - 4" + " - 鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts0, 宸ヤ綔鍙�={}", staProtocol.getWorkNo()); + continue; + } + if(!Objects.equals(rgvProtocol.getRgvPosI2(), wrkMastSta.getStaEnd())){ + continue; + } + Integer pos = 2; + boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,null,pos); //鍛戒护涓嬪彂 + if (sign){ + try{ + wrkMastSta.setWrkSts(3); + wrkMastStaMapper.updateById(wrkMastSta); + log.error("鏇存柊灏忚溅浠诲姟鎴愬姛"); + }catch (Exception e){ + log.error("鏇存柊灏忚溅浠诲姟澶辫触"); + } + + } else { + log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo()); + } + + } + } + rgvThread.setPakRgv(true);//浼樺厛鏀捐揣瀹屾垚锛屽紑鍚璋冨害 + } + } + + + + /** + * rgv鍑哄叆搴撲换鍔′笅鍙� + */ + public synchronized void rgvIoExecute(Integer mark) { + List<BasRgvMap> basRgvMaps = basRgvMapService.selectList(new EntityWrapper<>()); + + for (RgvSlave rgv : slaveProperties.getRgv()) { + // 鑾峰彇鍫嗗灈鏈轰俊鎭� + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + } + BasRgv basRgv = basRgvService.selectById(rgv.getId()); + if (basRgv == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�4", rgv.getId()); + continue; + } + + // 鍙湁褰揜GV绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛� + if ((rgvProtocol.getStatusType1() == RgvStatusType.IDLE && rgvProtocol.getStatusType2() == RgvStatusType.IDLE) + && rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvThread.isPakMk()) { + News.warnNoLog(""+mark+" - 0"+" - 寮�濮嬫墽琛孯GV鍏ュ嚭搴撲綔涓氫笅鍙�"); + // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡 +// rgvRunWrkMastInTest(); + + if (rgvProtocol.getLastIo().equals("I")) { + if (basRgv.getInEnable().equals("1") && rgvThread.isPakIn()) { + //mark - 1 - .... + this.rgvRunWrkMastIn(rgv, rgvProtocol,mark); // 鍏ュ簱 + rgvProtocol.setLastIo("O"); + } else if (basRgv.getOutEnable().equals("1") && rgvThread.isPakOut()) { + //mark - 2 - .... + this.rgvRunWrkMastOut(rgv, rgvProtocol,mark); // 鍑哄簱 + rgvProtocol.setLastIo("I"); + } + } + // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡 + else if (rgvProtocol.getLastIo().equals("O")) { + if (basRgv.getOutEnable().equals("1") && rgvThread.isPakOut()) { + this.rgvRunWrkMastOut(rgv, rgvProtocol,mark); // 鍑哄簱 + rgvProtocol.setLastIo("I"); + } else if (basRgv.getInEnable().equals("1") && rgvThread.isPakIn()) { + this.rgvRunWrkMastIn(rgv, rgvProtocol,mark); // 鍏ュ簱 + rgvProtocol.setLastIo("O"); + } + } + WrkMastSta wrkMastSta2 = wrkMastStaMapper.selectByWorkSta(2, (int) rgvProtocol.getRgvNo()); + WrkMastSta wrkMastSta1 = wrkMastStaMapper.selectByWorkSta(1, (int) rgvProtocol.getRgvNo()); + if(wrkMastSta1 != null && wrkMastSta2 != null){ + rgvThread.setPakMk(false); //灏忚溅鍙屽伐浣嶉攣瀹� + } + } + if(rgvProtocol.getStatusType1() == RgvStatusType.IDLE && rgvProtocol.getTaskNo1() == 0 && rgvThread.isPakIn() && rgvThread.isPakRgv()){ + rgvPreScheduling();//鑻ユ殏鏃犱笅鍙戜换鍔¢璋冨害鎻愬墠鍒板彇璐х偣 + } + + if (rgvProtocol.getStatusType1() == RgvStatusType.IDLE && rgvProtocol.getStatusType2() == RgvStatusType.IDLE + && rgvProtocol.getModeType() == RgvModeType.AUTO) { + //灏忚溅鎵ц鏀捐揣浠诲姟 + rgvOutExecute(); + + } + } + } + public synchronized void rgvRunWrkMastInTest(){ + BasRgvMap basRgvMap = basRgvMapMapper.selectById(1); + List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); + basRgvMap.setNowRoute(1021); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙� + WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(342);//鏍规嵁绔欑偣宸ヤ綔鍙峰拰灏忚溅宸ヤ綔鑼冨洿妫�绱换鍔℃。 + +// WrkMastSta wrkMastSta2 = wrkMastStaMapper.selectByWorkSta(2, 1); + boolean result = false; +// if(wrkMastSta2 != null && rgvProtocol.getRgvNo() == 1){ //璺濈璁$畻 2妤煎崟鍏ュ簱鍙d笉闇�瑕佽绠� +// result = rgvCalcDistance((int) rgvProtocol.getRgvNo(),wrkMastSta2.getStaEnd(),wrkMastSta.getStaStart());//宸ヤ綅2鏀捐揣绔欑偣锛屽伐浣�1鍙栬揣绔欑偣 +// } +// if(result){//鑻ュ皬杞﹁窛绂绘斁璐х偣璺濈杩戜簬鍙栬揣鐐瑰垯璺宠繃鍙栬揣 true璺宠繃鍙栬揣/false浼樺厛鍙栬揣 +// rgvThread.setPakRgv(false); +// continue; +// } + wrkMastSta.setWorkSta(1); + wrkMastSta.setRgvNo(1); + wrkMastSta.setStaStart(1035); + Short direction = 2;//鍙屽伐浣嶆渶缁堟姷杈句綅缃� + boolean sign = false; +// sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,direction,); //鍛戒护涓嬪彂 + if (sign){ + wrkMastSta.setWrkSts(1); + try{ + wrkMastStaMapper.updateById(wrkMastSta); + log.error("鏇存柊灏忚溅浠诲姟鎴愬姛"); + }catch (Exception e){ + log.error("鏇存柊灏忚溅浠诲姟澶辫触"); + } +// rgvThread.setPakOut(false);//鍑哄簱涓嶅厑璁� + boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526"); + if (!signMap){ + log.error("璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo()); + } + } else { + log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo()); + } + } + /** + * 灏忚溅鍏ュ簱浠诲姟鍙栬揣涓嬪彂 + */ + public synchronized void rgvRunWrkMastIn(RgvSlave slave, RgvProtocol rgvProtocol,Integer mark) { + for (RgvSlave.RgvStn rgvStn : slave.getRgvInTStn()) {//rgv鍏ュ簱鍙栬揣绔欑偣 + boolean flag = false; + boolean ds = false; + //閬嶅巻rgv鍏ュ簱鍙栬揣绔欑偣 + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(rgvStn.getStaNo()); + StaProtocol staProtocol2 = null; + + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, (int) rgvProtocol.getRgvNo()); + if(rgvStn.getStaNo2()!= null ){ + staProtocol2 = devpThread.getStation().get(rgvStn.getStaNo2()); + if (staProtocol2 == null) { + News.infoNoLog("" + mark + " - 1" + " - 1" + " - Rgv鍏ュ簱绔欎俊鎭�(staProtocol!=null缁х画鎵ц)锛歴taProtocol=" + staProtocol); + continue; + } else { + staProtocol2 = staProtocol2.clone(); + } + BasDevp staDetl2 = basDevpService.selectById(rgvStn.getStaNo2()); + if (staDetl2 == null) { + News.error("" + mark + " - 1" + " - 2" + " - 鍏ュ簱 ===>>Rgv绔欑偣鍦ㄦ暟鎹簱涓嶅瓨鍦�, 绔欑偣缂栧彿={}", rgvStn.getStaNo()); + continue; + } + } + if (staProtocol == null) { + News.infoNoLog("" + mark + " - 1" + " - 1" + " - Rgv鍏ュ簱绔欎俊鎭�(staProtocol!=null缁х画鎵ц)锛歴taProtocol=" + staProtocol); + continue; + } else { + staProtocol = staProtocol.clone(); + } + + // 鏌ヨ绔欑偣璇︾粏淇℃伅 + BasDevp staDetl = basDevpService.selectById(rgvStn.getStaNo()); + if (staDetl == null) { + News.error("" + mark + " - 1" + " - 2" + " - 鍏ュ簱 ===>>Rgv绔欑偣鍦ㄦ暟鎹簱涓嶅瓨鍦�, 绔欑偣缂栧彿={}", rgvStn.getStaNo()); + continue; + } + + + if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() != 0 + && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) { + flag = true; + } + if (!flag) { + News.errorNoLog("" + mark + " - 1" + " - 3" + " - Rgv鍏ュ簱鍙栬揣绔欎俊鎭�(浠ヤ笅闇�瑕佸叏true):" + + "鑷姩淇″彿" + staProtocol.isAutoing() + "鏈夌墿淇″彿" + staProtocol.isLoading() + + "宸ヤ綔鍙�>0" + staProtocol.getWorkNo() + "鍙叆淇″彿" + staProtocol.isInEnable() + + "鑳藉叆淇″彿锛坵ms璁剧疆锛�.equals(\"Y\")" + staDetl.getCanining()); + continue; + } + BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); +// List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); + basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙� +// WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol.getWorkNo()));//鏍规嵁绔欑偣宸ヤ綔鍙峰拰灏忚溅宸ヤ綔鑼冨洿妫�绱换鍔℃。 + WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(staProtocol.getWorkNo());//鏍规嵁绔欑偣宸ヤ綔鍙峰拰灏忚溅宸ヤ綔鑼冨洿妫�绱换鍔℃。 + + if( null == wrkMastSta ) { + News.infoNoLog("" + mark + " - 1" + " - 4" + " - 鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts0, 宸ヤ綔鍙�={}", staProtocol.getWorkNo()); + continue; + } + WrkMastSta wrkMastSta2 = wrkMastStaMapper.selectByWorkSta(2, (int) rgvProtocol.getRgvNo()); + boolean result = false; + if(wrkMastSta2 != null && rgvProtocol.getRgvNo() == 1){ //璺濈璁$畻 2妤煎崟鍏ュ簱鍙d笉闇�瑕佽绠� + result = rgvCalcDistance((int) rgvProtocol.getRgvNo(),wrkMastSta2.getStaEnd(),wrkMastSta.getStaStart());//宸ヤ綅2鏀捐揣绔欑偣锛屽伐浣�1鍙栬揣绔欑偣 + } + if(result){//鑻ュ皬杞﹁窛绂绘斁璐х偣璺濈杩戜簬鍙栬揣鐐瑰垯璺宠繃鍙栬揣 true璺宠繃鍙栬揣/false浼樺厛鍙栬揣 + rgvThread.setPakRgv(false); + continue; + } + wrkMastSta.setWorkSta(wrkMastSta2 !=null ? 1 : 2); + wrkMastSta.setRgvNo((int) rgvProtocol.getRgvNo()); + Short direction = 2;//鍙屽伐浣嶆渶缁堟姷杈句綅缃� + boolean sign = false; +// if(!Objects.equals(rgvProtocol.getRgvPosI2(), wrkMastSta.getStaEnd())){ +// continue; +// } + if(Objects.equals(rgvProtocol.getRgvPosI2(), wrkMastSta.getStaEnd()) && wrkMastSta.getWrkSts() == 4){ + wrkMastSta.setWrkSts(1); + try{ + wrkMastStaMapper.updateById(wrkMastSta); + log.error("鏇存柊灏忚溅浠诲姟鎴愬姛"); + }catch (Exception e){ + log.error("鏇存柊灏忚溅浠诲姟澶辫触"); + } + } + //鑻ュ彇璐т负宸ヤ綅2涓斿彇璐у彛鍓嶄竴绔欑偣鏈夌墿锛岀粰鍙屽伐浣嶅悓鏃朵笅鍙戞寚浠� + if(wrkMastSta.getWorkSta() == 2 && staProtocol2 != null && staProtocol2.isLoading() && staProtocol2.getWorkNo() > 0 && sign){ +// WrkMastSta wrkMastSta3 = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol2.getWorkNo()));//鏍规嵁绔欑偣宸ヤ綔鍙峰拰灏忚溅宸ヤ綔鑼冨洿妫�绱换鍔℃。 +// wrkMastSta3.setWorkSta(1); +// wrkMastSta3.setRgvNo((int) rgvProtocol.getRgvNo()); +// sign = rgvTakeFullAll2(basRgvMap.getRgvNo(), wrkMastSta, wrkMastSta3); + }else{ + sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,direction,1); //鍛戒护涓嬪彂 + } + if (sign){ + rgvThread.setPakOut(false);//鍑哄簱涓嶅厑璁� + } else { + log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo()); + } + + + } + } + /** + * 灏忚溅鍑哄簱浠诲姟鍙栬揣涓嬪彂 + */ + public synchronized void rgvRunWrkMastOut(RgvSlave slave, RgvProtocol rgvProtocol,Integer mark){ + for (RgvSlave.RgvStn rgvStn : slave.getRgvOutTStn()) {//rgv鍑哄簱鍙栬揣绔欑偣 + boolean flag = false; + //閬嶅巻rgv鍏ュ簱鍙栬揣绔欑偣 + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(rgvStn.getStaNo()); + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, (int) rgvProtocol.getRgvNo()); + StaProtocol staProtocol2 = null; + if(rgvStn.getStaNo2()!= null ){ + staProtocol2 = devpThread.getStation().get(rgvStn.getStaNo2()); + if (staProtocol2 == null) { + News.infoNoLog("" + mark + " - 1" + " - 1" + " - Rgv鍏ュ簱绔欎俊鎭�(staProtocol!=null缁х画鎵ц)锛歴taProtocol=" + staProtocol); + continue; + } else { + staProtocol2 = staProtocol2.clone(); + } + BasDevp staDetl2 = basDevpService.selectById(rgvStn.getStaNo2()); + if (staDetl2 == null) { + News.error("" + mark + " - 1" + " - 2" + " - 鍏ュ簱 ===>>Rgv绔欑偣鍦ㄦ暟鎹簱涓嶅瓨鍦�, 绔欑偣缂栧彿={}", rgvStn.getStaNo()); + continue; + } + } + if (staProtocol == null) { + News.infoNoLog("" + mark + " - 1" + " - 1" + " - Rgv鍑哄簱绔欎俊鎭�(staProtocol!=null缁х画鎵ц)锛歴taProtocol=" + staProtocol); + continue; + } else { + staProtocol = staProtocol.clone(); + } + + // 鏌ヨ绔欑偣璇︾粏淇℃伅 + BasDevp staDetl = basDevpService.selectById(rgvStn.getStaNo()); + if (staDetl == null) { + News.error("" + mark + " - 1" + " - 2" + " - 鍑哄簱 ===>>Rgv绔欑偣鍦ㄦ暟鎹簱涓嶅瓨鍦�, 绔欑偣缂栧彿={}", rgvStn.getStaNo()); + continue; + } + + if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 + && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) { + flag = true; + } + if (!flag) { + News.errorNoLog("" + mark + " - 1" + " - 3" + " - Rgv鍑哄簱鍙栬揣绔欎俊鎭�(浠ヤ笅闇�瑕佸叏true):" + + "鑷姩淇″彿" + staProtocol.isAutoing() + "鏈夌墿淇″彿" + staProtocol.isLoading() + + "宸ヤ綔鍙�>0" + staProtocol.getWorkNo() + "鍙叆淇″彿" + staProtocol.isOutEnable() + + "鑳藉叆淇″彿锛坵ms璁剧疆锛�.equals(\"Y\")" + staDetl.getCanouting()); + continue; + } + BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); +// List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); + basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙� + WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(staProtocol.getWorkNo());//鏍规嵁绔欑偣宸ヤ綔鍙峰拰灏忚溅宸ヤ綔鑼冨洿妫�绱换鍔℃。 + if( null == wrkMastSta ) { + News.infoNoLog("" + mark + " - 1" + " - 4" + " - 鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts0, 宸ヤ綔鍙�={}", staProtocol.getWorkNo()); + continue; + } + WrkMastSta wrkMastSta2 = wrkMastStaMapper.selectByWorkSta(2, (int) rgvProtocol.getRgvNo()); + boolean result = false; + if(wrkMastSta2 != null && rgvProtocol.getRgvNo() == 1){ //璺濈璁$畻 2妤煎崟鍏ュ簱鍙d笉闇�瑕佽绠� + result = rgvCalcDistance((int) rgvProtocol.getRgvNo(),wrkMastSta2.getStaEnd(),wrkMastSta.getStaStart());//宸ヤ綅2鏀捐揣绔欑偣锛屽伐浣�1鍙栬揣绔欑偣 + } + if(result){//鑻ュ皬杞﹁窛绂绘斁璐х偣璺濈杩戜簬鍙栬揣鐐瑰垯璺宠繃鍙栬揣 true璺宠繃鍙栬揣/false浼樺厛鍙栬揣 + rgvThread.setPakRgv(false); + continue; + } + WrkMastSta wrkMastSta1 = wrkMastStaMapper.selectByWorkSta(1, (int) rgvProtocol.getRgvNo()); + wrkMastSta.setWorkSta(wrkMastSta1 !=null ? 2 : 1);//鑻�1鍙峰伐浣嶆湁浠诲姟缁�2鍙峰伐浣� + wrkMastSta.setRgvNo((int) rgvProtocol.getRgvNo()); + boolean sign = false; + Short direction = 1;//宸ヤ綅1鏂瑰悜 + //鑻ュ彇璐т负宸ヤ綅2涓斿彇璐у彛鍓嶄竴绔欑偣鏈夌墿锛岀粰鍙屽伐浣嶅悓鏃朵笅鍙戞寚浠� + if(Objects.equals(rgvProtocol.getRgvPosI2(), wrkMastSta.getStaEnd()) && wrkMastSta.getWrkSts() == 4){ + wrkMastSta.setWrkSts(1); + try{ + wrkMastStaMapper.updateById(wrkMastSta); + log.error("鏇存柊灏忚溅浠诲姟鎴愬姛"); + }catch (Exception e){ + log.error("鏇存柊灏忚溅浠诲姟澶辫触"); + } + } + if(wrkMastSta.getWorkSta() == 1 && staProtocol2 != null && staProtocol2.isLoading() && staProtocol2.getWorkNo() > 0 && sign){ +// WrkMastSta wrkMastSta3 = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol2.getWorkNo()));//鏍规嵁绔欑偣宸ヤ綔鍙峰拰灏忚溅宸ヤ綔鑼冨洿妫�绱换鍔℃。 +// wrkMastSta3.setWorkSta(2); +// wrkMastSta3.setRgvNo((int) rgvProtocol.getRgvNo()); +// sign = rgvTakeFullAll2(basRgvMap.getRgvNo(), wrkMastSta, wrkMastSta3); + }else{ + sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,direction,2); //鍛戒护涓嬪彂 + } + if (sign){ + rgvThread.setPakIn(false);//鍏ュ簱涓嶅厑璁� + } else { + log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo()); + } + + + } + } /** * 鎵ц灏忚溅鎼繍浠诲姟 + * + * @return */ - public synchronized boolean rgvRunWrkMastFullSta() { - boolean wrkEnable = false; +// public synchronized boolean rgvRunWrkMastFullSta() { +// boolean wrkEnable = false; +// try{ +// List<BasRgvMap> basRgvMaps = basRgvMapService.selectList(new EntityWrapper<>()); +// for (BasRgvMap rgvSlave:basRgvMaps) { +// RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getRgvNo()); +// RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); +// if (rgvProtocol == null) { +// continue; +// }else { +// rgvProtocol = rgvProtocol.clone(); +// } +// BasRgv basRgv = basRgvService.selectById(rgvSlave.getRgvNo()); +// if (basRgv == null) { +// log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�4", rgvSlave.getRgvNo()); +// continue; +// } +// +// // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤 鍏ュ簱鍙栬揣 +// if (rgvProtocol.getStatusType() == RgvStatusType.IDLE +// && rgvProtocol.getModeType() == RgvModeType.AUTO +// && !rgvProtocol.isLoaded1ing() +// && rgvProtocol.getTaskNo1() == 0 +// && rgvThread.isPakMk() +// && rgvThread.isPakIn() +// ) { +// BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); +// if (basRgvMap == null) { +// log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo()); +// continue; +// } +// List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); +// basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙� +// List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); +// for (WrkMastSta wrkMastSta : wrkMastStaList){ +// List<Integer> staNos = Arrays.asList(1042, 1105, 1038, 1036, 2037);//鍏ュ簱鍙� +// if (!staNos.contains(wrkMastSta.getStaStart())) { +// continue; +// } +// boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //鍛戒护涓嬪彂 +// wrkEnable = true; +// if (sign){ +// wrkMastSta.setWrkSts(1); +// try{ +// wrkMastStaMapper.updateById(wrkMastSta); +// log.error("鏇存柊灏忚溅浠诲姟鎴愬姛"); +// }catch (Exception e){ +// log.error("鏇存柊灏忚溅浠诲姟澶辫触"); +// } +// rgvThread.setPakMk(false); +// rgvThread.setPakOut(false); +// boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526"); +// if (signMap){ +// return wrkEnable; +//// break; +// }else { +// log.error("璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo()); +// Thread.sleep(500); +// } +// } else { +// log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo()); +// Thread.sleep(500); +// } +// break; +// } +// } +// +// // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤 鍑哄簱鍙栬揣 +// if (rgvProtocol.getStatusType() == RgvStatusType.IDLE +// && rgvProtocol.getModeType() == RgvModeType.AUTO +// && !rgvProtocol.isLoaded2ing() +// && rgvProtocol.getTaskNo2() == 0 +// && rgvThread.isPakMk() +// && rgvThread.isPakOut() +// ){ +// BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); +// if (basRgvMap == null) { +// log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo()); +// continue; +// } +// List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); +// basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙� +// List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); +// for (WrkMastSta wrkMastSta : wrkMastStaList){ +// List<Integer> staNos = Arrays.asList(1042, 1105, 1038, 1036, 2037);//鍏ュ簱鍙� +// if (staNos.contains(wrkMastSta.getStaStart())) {//闈炲叆搴撳彛锛堝嚭搴撳彛锛夐檺鍒� +// continue; +// } +// boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,null); //鍛戒护涓嬪彂 +// wrkEnable = true; +// if (sign){ +// wrkMastSta.setWrkSts(1); +// try{ +// wrkMastStaMapper.updateById(wrkMastSta); +// log.error("鏇存柊灏忚溅浠诲姟鎴愬姛"); +// }catch (Exception e){ +// log.error("鏇存柊灏忚溅浠诲姟澶辫触"); +// } +// rgvThread.setPakMk(false); +// rgvThread.setPakOut(false); +// boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526"); +// if (signMap){ +// return wrkEnable; +//// break; +// }else { +// log.error("璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo()); +// Thread.sleep(500); +// } +// } else { +// log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo()); +// Thread.sleep(500); +// } +// break; +// } +// +// } +// +// } +// }catch (Exception e){ +// log.error("鎵ц灏忚溅鎼繍浠诲姟涓嬪彂澶辫触"); +// } +// return wrkEnable; +// } + /** + * 灏忚溅棰勮皟搴� + */ + public synchronized void rgvPreScheduling(){ try{ List<BasRgvMap> basRgvMaps = basRgvMapService.selectList(new EntityWrapper<>()); for (BasRgvMap rgvSlave:basRgvMaps) { @@ -2661,13 +3721,13 @@ continue; } - // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤 + // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤 鎵嶈繘琛岄璋冨害 if (rgvProtocol.getStatusType() == RgvStatusType.IDLE && rgvProtocol.getModeType() == RgvModeType.AUTO - && rgvProtocol.getLoaded1() == 0 + && !rgvProtocol.isLoaded1ing() && rgvProtocol.getTaskNo1() == 0 + && !rgvProtocol.isLoaded2ing() && rgvProtocol.getTaskNo2() == 0 - && rgvProtocol.getLoaded2() == 0 && rgvThread.isPakMk() ) { BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); @@ -2677,73 +3737,44 @@ } List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙� - List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); - for (WrkMastSta wrkMastSta : wrkMastStaList){ -// if (wrkMastSta.getType()!=0 || wrkMastSta.getWrkType()!=3 || wrkMastSta.getWrkSts()!=0){//1:婊$増 3锛氬彇鏀� -// continue; -// } - //鍒ゆ柇宸ヤ綔缁撴潫浣嶇疆鐘舵�� -// boolean signDev = false; -// BasDevp devNo = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", wrkMastSta.getStaEnd())); -// if (devNo.getDevNo()==113){ -// BasDevp devNo114 = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 114)); -// if (!Cools.isEmpty(devNo114)){ -// if (devNo114.getOutEnable().equals("Y")){ -// signDev = true; -// } -// } -// } -// if (!Cools.isEmpty(devNo)){ -// if (devNo.getAutoing().equals("Y") && !devNo.getWrkNo().equals(0) && !devNo.getLoading().equals("N")){ -// continue; -// } -// if (!signDev && devNo.getDevNo()==113){ -// if (!devNo.getAutoing().equals("Y") || !devNo.getWrkNo().equals(0) || !devNo.getLoading().equals("N")){ -// wrkEnable = true; -// continue; -// } -// if (!devNo.getOutEnable().equals("Y")){ -// wrkEnable = true; -// continue; -// } -// } -// } - boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //鍛戒护涓嬪彂 - wrkEnable = true; - if (sign){ - wrkMastSta.setWrkSts(1); - try{ - wrkMastStaMapper.updateById(wrkMastSta); - log.error("鏇存柊灏忚溅浠诲姟鎴愬姛"); - }catch (Exception e){ - log.error("鏇存柊灏忚溅浠诲姟澶辫触"); - } - rgvThread.setPakMk(false); - boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526"); - if (signMap){ - return wrkEnable; -// break; - }else { - log.error("3864琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo()); - Thread.sleep(500); - } - } else { - log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo()); - Thread.sleep(500); - } - break; - } - } + // 鏍规嵁杈撻�佺嚎plc閬嶅巻 + for (DevpSlave devp : slaveProperties.getDevp()) { + // 閬嶅巻鍏ュ簱鍙� 鍏ュ簱棰勮皟搴� + List<Integer> staNos = Arrays.asList( 1043, 1104,1037); + for (Integer staNo : staNos) { + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + StaProtocol staProtocol = devpThread.getStation().get(staNo); + if(staProtocol.isLoading()){ + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo((int) rgvProtocol.getRgvNo()); // RGV缂栧彿 + rgvCommand.setAckFinish1(false); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(9999); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 宸ヤ綅1浠诲姟妯″紡: 绉诲姩 + rgvCommand.setEndStaNo1(0); //宸ヤ綅1 鏀捐揣鍚庤鍘荤殑浣嶇疆 + switch (staNo){ + case 1043: rgvCommand.setTargetPosition1(1042);break; //宸ヤ綅1鐩爣绔欑偣 + case 1104: rgvCommand.setTargetPosition1(1105);break; + case 1037: rgvCommand.setTargetPosition1(1036);break; + } + if(Objects.equals(basRgvMap.getNowRoute(), staNo)){ + continue; + } + rgvCommand.setCommand(true); //宸ヤ綅1浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Rgv, (int) rgvProtocol.getRgvNo(), new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", (int) rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); + } + } + } + + } + + } } -// if (!wrkEnable){ -// rgvRunWrkMastEmptyStaAvoidance(); -// } }catch (Exception e){ - log.error("3875琛屾墽琛屽皬杞︽惉杩愪换鍔′笅鍙戝け璐�"); - log.error("3875琛�"+e); + log.error("鎵ц灏忚溅绉诲姩涓嬪彂澶辫触"); } - return wrkEnable; } /** * 鎵ц灏忚溅鎼繍浠诲姟 @@ -2877,134 +3908,134 @@ /* * 鏈変换鍔′絾鏈墽琛� 姝ゆ椂闇�瑕佽皟鏁村皬杞︿綅缃� * */ - public synchronized void rgvRunWrkMastEmptyStaAvoidance() { - try{ - Integer integer = wrkMastStaMapper.selectAllWrkStsCount(null,0);//鏌ヨ鐘舵�佷负0鐨勪换鍔� - if (integer==0){ - return; - } - List<BasRgvMap> basRgvMaps = basRgvMapService.selectList(new EntityWrapper<>()); - for (BasRgvMap rgvSlave:basRgvMaps) { - RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getRgvNo()); - RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); - if (rgvProtocol == null) { - continue; - }else { - rgvProtocol = rgvProtocol.clone(); - } - BasRgv basRgv = basRgvService.selectById(rgvSlave.getRgvNo()); - if (basRgv == null) { - log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�1", rgvSlave.getRgvNo()); - continue; - } - - // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤 - if (rgvProtocol.getStatusType() == RgvStatusType.IDLE - && rgvProtocol.getModeType() == RgvModeType.AUTO - && rgvProtocol.getLoaded1()==0 //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴 - && rgvProtocol.getTaskNo1()==0 - && rgvProtocol.getStatusType1() == RgvStatusType.IDLE - && rgvThread.isPakMk() -// && rgvProtocol.getTaskNo2()==0 - ){ - BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); - if (rgvProtocol.getRgvPosI().equals(basRgvMap.getStartRoute())){ - continue; - } -// if (rgvProtocol.getRgvNo()==1 && rgvProtocol.getRgvPosI().equals(100)){ -// continue; -// } else if (rgvProtocol.getRgvNo()==2 && rgvProtocol.getRgvPosI().equals(157) ){ +// public synchronized void rgvRunWrkMastEmptyStaAvoidance() { +// try{ +// Integer integer = wrkMastStaMapper.selectAllWrkStsCount(null,0);//鏌ヨ鐘舵�佷负0鐨勪换鍔� +// if (integer==0){ +// return; +// } +// List<BasRgvMap> basRgvMaps = basRgvMapService.selectList(new EntityWrapper<>()); +// for (BasRgvMap rgvSlave:basRgvMaps) { +// RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getRgvNo()); +// RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); +// if (rgvProtocol == null) { +// continue; +// }else { +// rgvProtocol = rgvProtocol.clone(); +// } +// BasRgv basRgv = basRgvService.selectById(rgvSlave.getRgvNo()); +// if (basRgv == null) { +// log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�1", rgvSlave.getRgvNo()); +// continue; +// } +// +// // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤 +// if (rgvProtocol.getStatusType() == RgvStatusType.IDLE +// && rgvProtocol.getModeType() == RgvModeType.AUTO +// && !rgvProtocol.isLoaded1ing() //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴 +// && rgvProtocol.getTaskNo1()==0 +// && rgvProtocol.getStatusType1() == RgvStatusType.IDLE +// && rgvThread.isPakMk() +//// && rgvProtocol.getTaskNo2()==0 +// ){ +// BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); +// if (rgvProtocol.getRgvPosI().equals(basRgvMap.getStartRoute())){ // continue; // } - rgvAvoidanceXY(rgvProtocol.getRgvNo()); - rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute(),"2727"); - } - } - }catch (Exception e){ - log.error("4109琛屾墽琛屽皬杞﹀垵濮嬪寲浠诲姟涓嬪彂澶辫触"); - log.error("4109琛�"+e); - } - } +//// if (rgvProtocol.getRgvNo()==1 && rgvProtocol.getRgvPosI().equals(100)){ +//// continue; +//// } else if (rgvProtocol.getRgvNo()==2 && rgvProtocol.getRgvPosI().equals(157) ){ +//// continue; +//// } +// rgvAvoidanceXY((int) rgvProtocol.getRgvNo()); +// rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute(),"2727"); +// } +// } +// }catch (Exception e){ +// log.error("4109琛屾墽琛屽皬杞﹀垵濮嬪寲浠诲姟涓嬪彂澶辫触"); +// log.error("4109琛�"+e); +// } +// } /* * 灏忚溅XY绉诲姩 閬胯 * */ - public synchronized boolean rgvAvoidanceXY(Integer rgvId){ - BasRgvMap basRgvMap = basRgvMapService.selectByRgvNo(rgvId); - if (basRgvMap.getStartRoute() == 100 || basRgvMap.getStartRoute() == 101){ - try{ - - // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- - RgvCommand rgvCommand = new RgvCommand(); - rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 - rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� - rgvCommand.setTaskNo1((short)32222); // 宸ヤ綅1宸ヤ綔鍙� - rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 宸ヤ綅1浠诲姟妯″紡: 鍥炲師鐐� - //basRgvMap.getLockStartRoute().shortValue() - rgvCommand.setSourceStaNo1(basRgvMap.getStartRoute().shortValue()); - rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 - if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { - //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� step=9锛屽洖鍘熺偣 9999浠诲姟鍙� - log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); - return false; - } else { - return true; - } - }catch (Exception e){ - return false; - - } - }else { - try{ - // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- - RgvCommand rgvCommand = new RgvCommand(); - rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 - rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� - rgvCommand.setTaskNo1((short)32222); // 宸ヤ綅1宸ヤ綔鍙� - rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 宸ヤ綅1浠诲姟妯″紡: 鍥炲師鐐� - //basRgvMap.getLockStartRoute().shortValue() - rgvCommand.setSourceStaNo1(basRgvMap.getStartRoute().shortValue()); - rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 - if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { - //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� step=9锛屽洖鍘熺偣 9999浠诲姟鍙� - log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); - return false; - } else { - return true; - } - }catch (Exception e){ - return false; - - } - } - } +// public synchronized boolean rgvAvoidanceXY(Integer rgvId){ +// BasRgvMap basRgvMap = basRgvMapService.selectByRgvNo(rgvId); +// if (basRgvMap.getStartRoute() == 100 || basRgvMap.getStartRoute() == 101){ +// try{ +// +// // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- +// RgvCommand rgvCommand = new RgvCommand(); +// rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 +// rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� +// rgvCommand.setTaskNo1((short)32222); // 宸ヤ綅1宸ヤ綔鍙� +// rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 宸ヤ綅1浠诲姟妯″紡: 鍥炲師鐐� +// //basRgvMap.getLockStartRoute().shortValue() +// rgvCommand.setSourceStaNo1(basRgvMap.getStartRoute().shortValue()); +// rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 +// if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { +// //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� step=9锛屽洖鍘熺偣 9999浠诲姟鍙� +// log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); +// return false; +// } else { +// return true; +// } +// }catch (Exception e){ +// return false; +// +// } +// }else { +// try{ +// // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- +// RgvCommand rgvCommand = new RgvCommand(); +// rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 +// rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� +// rgvCommand.setTaskNo1((short)32222); // 宸ヤ綅1宸ヤ綔鍙� +// rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 宸ヤ綅1浠诲姟妯″紡: 鍥炲師鐐� +// //basRgvMap.getLockStartRoute().shortValue() +// rgvCommand.setSourceStaNo1(basRgvMap.getStartRoute().shortValue()); +// rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 +// if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { +// //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� step=9锛屽洖鍘熺偣 9999浠诲姟鍙� +// log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); +// return false; +// } else { +// return true; +// } +// }catch (Exception e){ +// return false; +// +// } +// } +// } /* * 灏忚溅鍙栬揣鑷冲伐浣嶄换鍔� * */ - public synchronized boolean rgvTakeFullAll(Integer rgvId,WrkMastSta wrkMastSta){ + public synchronized boolean rgvTakeFullAll(Integer rgvId,WrkMastSta wrkMastSta,Short direction,Integer pos){ try{ - int startSta = wrkMastSta.getStaStart(); // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- RgvCommand rgvCommand = new RgvCommand(); + boolean pakIn1 = true; + boolean pakIn2 = true; rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 - if((startSta >= 1001 && startSta <= 1035) || (startSta >= 2001 && startSta <= 2030)){//鍑哄簱RGV鍙栬揣 - rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� - rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙� - rgvCommand.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅2浠诲姟妯″紡: 鍙栨斁璐� - rgvCommand.setSourceStaNo2(wrkMastSta.getStaStart().shortValue()); //宸ヤ綅2璧风偣 - rgvCommand.setDestinationStaNo2(wrkMastSta.getStaEnd().shortValue()); //宸ヤ綅2鐩爣绔欑偣 - rgvCommand.setCommand((short) 2); //宸ヤ綅1浠诲姟纭 - }else{ //鍏ュ簱RGV鍙栬揣 - rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� - rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� - rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅1浠诲姟妯″紡: 鍙栨斁璐� - rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue()); //宸ヤ綅1璧风偣 - rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue()); //宸ヤ綅1鐩爣绔欑偣 - rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 - } - if(rgvCommand.getCommand() == 1){ + if(wrkMastSta.getWrkSts() == 0){//鍒濆鍚庤璧� + rgvCommand.setAckFinish1(false); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskStatus1(RgvTaskStatusType.X_MOVE); // 宸ヤ綅1浠诲姟妯″紡: 鍙栨斁璐� + rgvCommand.setEndStaNo1(wrkMastSta.getWrkEnd()); //宸ヤ綅1 鏀捐揣鍚庤鍘荤殑浣嶇疆 + rgvCommand.setTargetPosition1(wrkMastSta.getStaStart()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setCommand(true); //宸ヤ綅1浠诲姟纭 +// } + wrkMastSta.setWrkSts(4); + try{ + wrkMastStaMapper.updateById(wrkMastSta); + log.error("鏇存柊灏忚溅浠诲姟鎴愬姛"); + }catch (Exception e){ + log.error("鏇存柊灏忚溅浠诲姟澶辫触"); + } if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); @@ -3012,8 +4043,130 @@ } else { return true; } - }else{ - if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { + } + if(wrkMastSta.getWrkSts() == 1){//鍙栬揣 + if(pos == 2){//鍑哄簱RGV鍙栬揣 + rgvCommand.setAckFinish2(false); // 宸ヤ綅2浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo2(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅2宸ヤ綔鍙� + rgvCommand.setTaskStatus2(RgvTaskStatusType.FETCH); // 宸ヤ綅2浠诲姟妯″紡: 鍙栨斁璐� + rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd()); //宸ヤ綅2 鏀捐揣鍚庤鍘荤殑浣嶇疆 + rgvCommand.setTargetPosition1(wrkMastSta.getStaStart()); //宸ヤ綅2鐩爣绔欑偣 + rgvCommand.setDirection2((short)2); +// rgvCommand.setWrkTaskMove2(direction); + rgvCommand.setCommand(true); //宸ヤ綅1浠诲姟纭 + pakIn1 = false; + }else{ //鍏ュ簱RGV鍙栬揣 + rgvCommand.setAckFinish1(false); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskStatus1(RgvTaskStatusType.FETCH); // 宸ヤ綅1浠诲姟妯″紡: 鍙栨斁璐� + rgvCommand.setEndStaNo1(wrkMastSta.getWrkEnd()); //宸ヤ綅1 鏀捐揣鍚庤鍘荤殑浣嶇疆 + rgvCommand.setTargetPosition1(wrkMastSta.getStaStart()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setDirection1((short)1); +// rgvCommand.setWrkTaskMove1(direction); + rgvCommand.setCommand(true); //宸ヤ綅1浠诲姟纭 + } + if(!pakIn1){ + if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + }else{ + if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + } + } + if(wrkMastSta.getWrkSts() == 2) {//鏀捐揣 + if((pos == 2)){ //宸ヤ綅2浠诲姟鏀捐揣 + rgvCommand.setAckFinish2(false); // 宸ヤ綅2浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo2(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅2宸ヤ綔鍙� + rgvCommand.setTaskStatus2(RgvTaskStatusType.PUT); // 宸ヤ綅2浠诲姟妯″紡: 鏀捐揣 + rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd()); //宸ヤ綅2 鏀捐揣鍚庤鍘荤殑浣嶇疆 + rgvCommand.setTargetPosition1(wrkMastSta.getStaEnd()); //宸ヤ綅2鐩爣绔欑偣 + rgvCommand.setDirection2((short)2); + rgvCommand.setCommand(true); //宸ヤ綅1浠诲姟纭 + pakIn2 = false; + }else{ //宸ヤ綅1浠诲姟鏀捐揣 + rgvCommand.setAckFinish1(false); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskStatus1(RgvTaskStatusType.PUT); // 宸ヤ綅1浠诲姟妯″紡: 鏀捐揣 + rgvCommand.setEndStaNo1(wrkMastSta.getWrkEnd()); //宸ヤ綅1 鏀捐揣鍚庤鍘荤殑浣嶇疆 + rgvCommand.setTargetPosition1(wrkMastSta.getStaEnd()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setDirection1((short)1); + rgvCommand.setCommand(true); //宸ヤ綅1浠诲姟纭 + } + if(pakIn2){ + if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + }else{ + if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + } + } + return true; + }catch (Exception e){ + return false; + } + } + + + /* + * 灏忚溅鍙栬揣鑷冲弻宸ヤ綅浠诲姟 + * */ + public synchronized boolean rgvTakeFullAll2(Integer rgvId,WrkMastSta wrkMastSta,WrkMastSta wrkMastSta2){ + try{ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + boolean pakIn1 = true; + boolean pakIn2 = true; + rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 + if(wrkMastSta.getWrkSts() == 0) {//鍙栬揣 + if (wrkMastSta.getWorkSta() == 2) {//鍏ュ簱RGV鍙栬揣 + rgvCommand.setAckFinish2(false); // 宸ヤ綅2浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo2(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅2宸ヤ綔鍙� + rgvCommand.setTaskStatus2(RgvTaskStatusType.FETCH); // 宸ヤ綅2浠诲姟妯″紡: 鍙栨斁璐� + rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd()); //宸ヤ綅2 鏀捐揣鍚庤鍘荤殑浣嶇疆 + rgvCommand.setTargetPosition2(wrkMastSta.getStaStart()); //宸ヤ綅2鐩爣绔欑偣 + rgvCommand.setCommand(true); //宸ヤ綅1浠诲姟纭 + rgvCommand.setAckFinish1(false); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(Math.toIntExact(wrkMastSta2.getWrkNo())); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskStatus1(RgvTaskStatusType.FETCH); // 宸ヤ綅1浠诲姟妯″紡: 鍙栨斁璐� + rgvCommand.setEndStaNo1(wrkMastSta2.getWrkEnd()); //宸ヤ綅1 鏀捐揣鍚庤鍘荤殑浣嶇疆 + rgvCommand.setTargetPosition1(wrkMastSta2.getStaStart()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setCommand(true); //宸ヤ綅1浠诲姟纭 + rgvCommand.setWrkTaskPri((short) 2); //浼樺厛鎵ц宸ヤ綅2浠诲姟 + } else { //鍑哄簱RGV鍙栬揣 + rgvCommand.setAckFinish1(false); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskStatus1(RgvTaskStatusType.FETCH); // 宸ヤ綅1浠诲姟妯″紡: 鍙栨斁璐� + rgvCommand.setEndStaNo1(wrkMastSta.getWrkEnd()); //宸ヤ綅1 鏀捐揣鍚庤鍘荤殑浣嶇疆 + rgvCommand.setTargetPosition1(wrkMastSta.getStaStart()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setAckFinish2(false); // 宸ヤ綅2浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo2(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅2宸ヤ綔鍙� + rgvCommand.setTaskStatus2(RgvTaskStatusType.FETCH); // 宸ヤ綅2浠诲姟妯″紡: 鍙栨斁璐� + rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd()); //宸ヤ綅2 鏀捐揣鍚庤鍘荤殑浣嶇疆 + rgvCommand.setTargetPosition2(wrkMastSta.getStaStart()); //宸ヤ綅2鐩爣绔欑偣 + rgvCommand.setWrkTaskPri((short) 1); //鍑哄簱鍙栬揣浼樺厛鎵ц宸ヤ綅1浠诲姟 + rgvCommand.setCommand(true); //宸ヤ綅1浠诲姟纭 + } + if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(2, rgvCommand))) { //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); return false; @@ -3021,6 +4174,43 @@ return true; } } + +// if(wrkMastSta.getWrkSts() == 2) {//鏀捐揣 +// if((wrkMastSta.getWorkSta() == 2)){ //宸ヤ綅2浠诲姟鏀捐揣 +// rgvCommand.setAckFinish2(false); // 宸ヤ綅2浠诲姟瀹屾垚纭浣� +// rgvCommand.setTaskNo2(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅2宸ヤ綔鍙� +// rgvCommand.setTaskStatus2(RgvTaskStatusType.PUT); // 宸ヤ綅2浠诲姟妯″紡: 鏀捐揣 +// rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd()); //宸ヤ綅2 鏀捐揣鍚庤鍘荤殑浣嶇疆 +// rgvCommand.setTargetPosition2(wrkMastSta.getStaEnd()); //宸ヤ綅2鐩爣绔欑偣 +// rgvCommand.setCommand(true); //宸ヤ綅1浠诲姟纭 +// pakIn2 = false; +// }else{ //宸ヤ綅1浠诲姟鏀捐揣 +// rgvCommand.setAckFinish1(false); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� +// rgvCommand.setTaskNo1(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅1宸ヤ綔鍙� +// rgvCommand.setTaskStatus1(RgvTaskStatusType.PUT); // 宸ヤ綅1浠诲姟妯″紡: 鏀捐揣 +// rgvCommand.setEndStaNo1(wrkMastSta.getWrkEnd()); //宸ヤ綅1 鏀捐揣鍚庤鍘荤殑浣嶇疆 +// rgvCommand.setTargetPosition1(wrkMastSta.getStaEnd()); //宸ヤ綅1鐩爣绔欑偣 +// rgvCommand.setCommand(true); //宸ヤ綅1浠诲姟纭 +// } +// if(!pakIn2){ +// if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { +// //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� +// log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); +// return false; +// } else { +// return true; +// } +// }else{ +// if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { +// //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� +// log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); +// return false; +// } else { +// return true; +// } +// } +// } + return true; }catch (Exception e){ return false; } @@ -3126,6 +4316,37 @@ // } // } + /** + * 鍙栨斁鍙栬矾寰勮绠� + */ + public synchronized boolean rgvCalcDistance(Integer rgvNo, Integer outStn, Integer inStn){ + try { + // 灏忚溅褰撳墠浣嶇疆 + BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvNo); + Integer currPos = basRgvMap.getNowRoute(); // 鎴栬�呯敤 rgvProtocol.getRgvPosI() + + if(currPos == null || outStn == null || inStn == null){ + return false; // 鏃犳晥鏁版嵁鐩存帴鏀惧純 + } + + // 璁$畻涓ゆ璺濈 + List<Integer> routeToOut = RouteUtils.getRouteDis(currPos, outStn); + List<Integer> routeToIn = RouteUtils.getRouteDis(currPos, inStn); + + int distOut = (routeToOut != null) ? routeToOut.size() : Integer.MAX_VALUE; + int distIn = (routeToIn != null) ? routeToIn.size() : Integer.MAX_VALUE; + + // 璋冭瘯鏃ュ織 + log.info("RGV璺濈璁$畻: currPos={}, outStn={}, distOut={}, inStn={}, distIn={}", + currPos, outStn, distOut, inStn, distIn); + + return distOut < distIn; // 鏀捐揣鐐规洿杩� 鈫� true + } catch (Exception e) { + log.error("RGV璺緞璺濈璁$畻寮傚父", e); + return false; + } + } + /* * 灏忚溅澶嶄綅 * */ @@ -3146,4 +4367,235 @@ } } + /* + * 灏忚溅澶嶄綅 + * */ + public synchronized boolean rgvComplete2(Integer rgvId,Integer step,Long workNo){ + try{ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(step, new RgvCommand(),workNo))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}",rgvId); + return false; + } else { + log.info("RGV鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}",rgvId); + return true; + } + }catch (Exception e){ + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}銆傚紓甯革細"+e,rgvId); + return false; + } + } + + public synchronized boolean rgvComplete3(Integer rgvId,Integer step,Long workNo,Short moveSta){ + try{ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(step, new RgvCommand(),workNo,moveSta))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}",rgvId); + return false; + } else { + log.info("RGV鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}",rgvId); + return true; + } + }catch (Exception e){ + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}銆傚紓甯革細"+e,rgvId); + return false; + } + } + + + + + /* + * arm浠诲姟瀹屾垚鑷姩缁勬墭 + * */ + public synchronized void armMissionAccomplished() { + try{ + for (DevpSlave devp : slaveProperties.getDevp()) { + // 閬嶅巻鎷f枡鍏ュ簱鍙� + for (DevpSlave.Sta armSta : devp.getArmSta()) { + // 鑾峰彇鏉$爜鎵弿浠俊鎭� + BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, armSta.getBarcode()); + if (barcodeThread == null) { + continue; + } + String barcode = barcodeThread.getBarcode(); + if(!Cools.isEmpty(barcode)) { + if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { + continue; + } + } else { + continue; + } + + List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>() + .eq("arm_no", armSta.getArmNo()) + .eq("sta_no", armSta.getStaNo()) + .eq("status", 1)); + for (BasArm basArm : basArmList) { + if (basArm.getStatus()!=1){ + continue; + } + try{ + List<BasArmMast> basArmMastList = basArmMastService.selectList( + new EntityWrapper<BasArmMast>() + .eq("arm_no", basArm.getArmNo()) + .eq("sorting_line", basArm.getSortingLine()) + .eq("status", 3) + ); + if (basArmMastList.isEmpty()){ + continue; + } + CombParam combParam = new CombParam(basArmMastList); + combParam.setBarcode(barcode); + //璁剧疆宸ヤ綔绌洪棿灏辩华 + ReturnT<String> result = new PostMesDataUtils().postMesData("arm浠诲姟瀹屾垚鑷姩缁勬墭",wmsUrl, wmsComb, combParam); + if (result.getCode()==200){ + basArmMastService.updateArmMastStatus(basArm.getArmNo(),basArm.getSortingLine(),3,4); + } else { + log.error("鏈烘鑷傛姄鍙栦换鍔″畬鎴愶細"+JSON.toJSON(basArmMastList)+"===銆嬭嚜鍔ㄧ粍鎵樺け璐ワ紝绛夊緟閲嶈瘯"); + } + } catch (Exception e){ + log.error("arm缂栧彿锛�"+basArm.getArmNo()+"====銆嬫満姊拌噦鎶撳彇浠诲姟瀹屾垚"+e.getMessage()); + } + break; + } + } + } + } catch (Exception e){ + log.error("鏈烘鑷傛姄鍙栦换鍔″畬鎴愮粍鎵樺け璐�"+e.getMessage()); + } + } + public synchronized void armMissionAccomplishedScanToCheckIn() { + try{ + for (DevpSlave devp : slaveProperties.getDevp()) { + // 閬嶅巻鎷f枡鍏ュ簱鍙� + for (DevpSlave.Sta armSta : devp.getArmSta()) { + + List<BasArmMast> basArmMastList = basArmMastService.selectList( + new EntityWrapper<BasArmMast>() + .eq("arm_no", armSta.getArmNo()) + .eq("sta_no", armSta.getStaNo()) + .eq("status", 4) + ); + + if (basArmMastList.isEmpty()){ + continue; + } + // 鑾峰彇绔欑偣淇℃伅 + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + StaProtocol staProtocol = devpThread.getStation().get(armSta.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + + if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) { + int workNo = commonService.getWorkNo(6);//寰呭畬鍠� + // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护 + staProtocol.setWorkNo(workNo); + staProtocol.setStaNo(armSta.getStaNoEnd().shortValue()); + devpThread.setPakMk(staProtocol.getSiteId(), false); + boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + log.error("杈撻�佺嚎涓嬪彂5锛�"+workNo+","+armSta.getStaNoEnd()); + if (!result) { + News.error(""+" - 3"+" - 鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId()); + } + basArmMastService.updateArmMastStatus(basArmMastList.get(0).getArmNo(),basArmMastList.get(0).getSortingLine(),4,5); + } + } + } + } catch (Exception e){ + log.error("缁勬墭瀹屾垚椹卞姩鎵樼洏鎵爜鍏ュ簱澶辫触"+e.getMessage()); + } + } + + /* + * arm浠诲姟涓嬪彂 + * */ + public synchronized void armTaskAssignment() { + try{ + List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<>()); + for (BasArm basArm : basArmList) { + if (basArm.getStatus()!=1){ + continue; + } + try{ + List<BasArmMast> basArmMastListRuning = basArmMastService.selectList( + new EntityWrapper<BasArmMast>() + .eq("arm_no", basArm.getArmNo()) + .eq("sorting_line", basArm.getSortingLine()) + .eq("status", 1) + ); + List<BasArmMast> basArmMastListRuning3 = basArmMastService.selectList( + new EntityWrapper<BasArmMast>() + .eq("arm_no", basArm.getArmNo()) + .eq("sorting_line", basArm.getSortingLine()) + .eq("status", 3) + ); + if (basArmMastListRuning.isEmpty() && basArmMastListRuning3.isEmpty()){ + List<BasArmMast> basArmMastList = basArmMastService.selectList( + new EntityWrapper<BasArmMast>() + .eq("arm_no", basArm.getArmNo()) + .eq("sorting_line", basArm.getSortingLine()) + .eq("status", 0) + ); + if (basArmMastList.isEmpty()){ + continue; + } + if (basArmMastList.size()>1){ + log.error("arm缂栧彿锛�"+basArm.getArmNo()+"====銆嬫媶鐮佸灈浠诲姟寮傚父绂佹涓嬪彂锛侊紒锛佷换鍔″緟鎵ц鏁伴噺澶т簬1锛侊紒锛�"); + continue; + } + BasArmMast basArmMast = basArmMastList.get(0); + List<BasArmMast> basArmMastListOrder = basArmMastService.selectList( + new EntityWrapper<BasArmMast>() + .eq("arm_no", basArm.getArmNo()) + .eq("sorting_line", basArm.getSortingLine()) + .eq("sku", basArmMast.getSku()) + .eq("order_no", basArmMast.getOrderNo()) + ); + if (basArmMastListOrder.size()==1){ + OrderDetlValueResultUtil orderDetlValueResultUtil = basArmMastService.selectOrderDetlValue(basArmMast.getOrderNo(), basArmMast.getSku()); + + if (Cools.isEmpty(orderDetlValueResultUtil)){ + continue; + } + //璁㈠崟涓嬪彂 + try{ + ArmOrderAssignmentParam armOrderAssignmentParam = new ArmOrderAssignmentParam(basArmMast,orderDetlValueResultUtil); +// 璁㈠崟涓嬪彂(SKU+璁㈠崟) + ReturnT<String> result = new PostMesDataUtils().postMesData("鏈烘鑷傛姄鍙栬鍗曪紙SKU锛変笅鍙戯細",ArmConstant.getArmUrl(basArmMast.getArmNo()), ArmConstant.ARM_ADAPTOR, armOrderAssignmentParam); + if (result.getCode()==200){ + basArmMast.setStatus(1); + basArmMastService.updateById(basArmMast); + } else { + log.error("鏈烘鑷傛姄鍙栬鍗曪紙SKU锛変笅鍙戯細"+JSON.toJSON(basArmMast)+"===銆嬭鍗曚俊鎭笅鍙戝け璐�"); + } + } catch (Exception e){ + log.error("鏈烘鑷傛姄鍙栬鍗曪紙SKU锛変笅鍙戯細"+JSON.toJSON(basArmMast)+"===銆嬭鍗曚笅鍙戣鍗曚俊鎭笅鍙戝け璐�"); + continue; + } + } + ArmTaskAssignmentParam armTaskAssignmentParam = new ArmTaskAssignmentParam(basArmMast.getSortingLine()); + //璁剧疆宸ヤ綔绌洪棿灏辩华 + ReturnT<String> result = new PostMesDataUtils().postMesData("鏈烘鑷傛姄鍙栦换鍔′笅鍙戯細閫氱煡宸ヤ綔绌洪棿宸插氨缁�",ArmConstant.getArmUrl(basArmMast.getArmNo()), ArmConstant.ARM_WORKSPACE, armTaskAssignmentParam); + if (result.getCode()==200){ + basArmMast.setStatus(1); + basArmMastService.updateById(basArmMast); + } else { + log.error("鏈烘鑷傛姄鍙栦换鍔★細"+JSON.toJSON(basArmMast)+"===銆嬩换鍔′俊鎭笅鍙戝け璐�"); + } + } + } catch (Exception e){ + log.error("arm缂栧彿锛�"+basArm.getArmNo()+"====銆嬫媶鐮佸灈浠诲姟涓嬪彂澶辫触"+e.getMessage()); + } + } + }catch (Exception e){ + log.error("arm浠诲姟涓嬪彂澶辫触"+e.getMessage()); + } + } + } -- Gitblit v1.9.1