| | |
| | | @Autowired |
| | | private BasPlcerrorLogServiceImpl basPlcerrorLogService; |
| | | public Long currentTimeMilliConnectCrnAuto= 0L; |
| | | public int[] signIntOut= new int[]{0,0,0,0,0}; |
| | | |
| | | public void generateStoreWrkFile() { |
| | | try { |
| | |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0)) { |
| | | if (!staProtocol.isAutoing() || !staProtocol.isLoading()) { |
| | | continue; |
| | | } |
| | | TaskWrk taskWrk = taskWrkMapper.selectCrnStaWorking(crnProtocol.getLaneNo(), staDesc.getStnNo().toString()); |
| | | if (taskWrk == null) { |
| | | log.info("堆垛机出库站到出库站:未查询到状态为13的任务信息,站点号:" + staDesc.getStnNo().toString()); |
| | | continue; |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0 || staProtocol.getWorkNo().equals(taskWrk.getWrkNo()))) { |
| | | // 查询工作档 |
| | | TaskWrk taskWrk = taskWrkMapper.selectCrnStaWorking(crnProtocol.getLaneNo(), staDesc.getStnNo().toString()); |
| | | if (taskWrk == null) { |
| | | continue; |
| | | } |
| | | log.info("下发输送线任务:taskWrk:" + JSON.toJSONString(taskWrk)); |
| | | // R r = siteController.siteDetlUpdate(Integer.valueOf(taskWrk.getTargetPoint()), taskWrk.getWrkNo().shortValue(), (short) 0, "Y", false, false); |
| | | staProtocol.setWorkNo(taskWrk.getWrkNo()); |
| | |
| | | ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); |
| | | if (!allTaskProtocol.isEmpty()) { |
| | | for (TaskProtocol taskProtocol : allTaskProtocol.values()) { |
| | | if (taskProtocol.getTaskNo() != 0) { |
| | | if (taskProtocol.getTaskNo() != 0 && taskProtocol.getTaskNo()!=32222L) { |
| | | return taskProtocol.getTaskNo().toString(); |
| | | } |
| | | } |
| | |
| | | } |
| | | return null; |
| | | } |
| | | public TaskWrk deviceDetectionGetWrkNo(RgvSlave.RgvStn inSta) { |
| | | |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); |
| | | if (staProtocol == null || Cools.isEmpty(staProtocol.getWorkNo())) { |
| | | return null; |
| | | } |
| | | TaskWrk taskWrk = taskWrkService.selectByWrkNo(staProtocol.getWorkNo()); |
| | | return taskWrk; |
| | | } |
| | | public boolean deviceDetection(RgvSlave.RgvStn inSta,Integer rgvNo) { |
| | | ArrayList<Integer> arrayList = new ArrayList<Integer>() {{ |
| | | add(1009); |
| | |
| | | public synchronized void taskStart() { |
| | | for (RgvSlave rgvSlave : slaveProperties.getRgv()) { |
| | | try { |
| | | Thread.sleep(101); |
| | | if (rgvDetection(rgvSlave)) { |
| | | String taskNoNow = rgvOtherTaskWrk(rgvSlave); |
| | | List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("PLC_POSITION", true)); |
| | |
| | | } |
| | | List<TaskWrk> taskWrkList = new ArrayList<>(); |
| | | List<Integer> staList = new ArrayList<>(); |
| | | List<String> taskNoList = taskStartRepel(); |
| | | for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()) { |
| | | TaskWrk taskWrk = deviceDetection(inSta); |
| | | if (taskWrk != null) { |
| | | if (taskWrk.getWrkNo().toString().equals(taskNoNow)) continue; |
| | | if (!taskNoList.contains(taskWrk.getWrkNo().toString())) continue; |
| | | taskWrkList.add(taskWrk); |
| | | staList.add(inSta.getStaNo()); |
| | | } |
| | |
| | | if (rgvOtherIDLEOther(rgvSlave)){ |
| | | if (!rgvOtherIDLE(rgvSlave,staList.get(0))){ |
| | | System.out.println("空闲就近跳过==="+rgvSlave.getId()+"==="); |
| | | RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"空闲就近跳过"); |
| | | |
| | | sign=true; |
| | | if (itSmall){ |
| | | RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"空闲就近跳过"); |
| | | sign=true; |
| | | } |
| | | } |
| | | } |
| | | if (sign){ |
| | |
| | | if (rgvOtherIDLEOther2(rgvSlave)){ |
| | | if (!rgvOtherIDLE2(rgvSlave,staList.get(0))){ |
| | | System.out.println("运行就近跳过==="+rgvSlave.getId()+"==="); |
| | | RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"运行就近跳过"); |
| | | |
| | | sign=true; |
| | | if (itSmall){ |
| | | RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"运行就近跳过"); |
| | | sign=true; |
| | | } |
| | | } |
| | | } |
| | | if (sign){ |
| | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | public List<String> taskStartRepel() { |
| | | ArrayList<String> arrayListOld = new ArrayList<>(); |
| | | ArrayList<String> arrayListNew = new ArrayList<>(); |
| | | ArrayList<Integer> arrayListAllP = new ArrayList<>(); |
| | | ArrayList<Long[]> arrayListAll = new ArrayList<>(); |
| | | for (RgvSlave rgvSlave : slaveProperties.getRgv()) { |
| | | try{ |
| | | boolean itSmall = new TrackRangeUtils().IsItSmall(rgvSlave); |
| | | String taskNoNow = rgvOtherTaskWrk(rgvSlave); |
| | | if (taskNoNow.equals("无")){ |
| | | continue; |
| | | } |
| | | if (!arrayListOld.contains(taskNoNow)){ |
| | | arrayListOld.add(taskNoNow); |
| | | } |
| | | |
| | | TaskWrk taskWrk = taskWrkMapper.selectByTaskNo(taskNoNow); |
| | | if (taskWrk != null) { |
| | | if (!arrayListAllP.contains(taskWrk.getWrkNo())) { |
| | | |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); |
| | | |
| | | arrayListAllP.add(taskWrk.getWrkNo()); |
| | | long startP = 0; |
| | | if (!itSmall){ |
| | | startP = System.currentTimeMillis(); |
| | | } |
| | | |
| | | long endP = 0; |
| | | ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); |
| | | boolean sign = true; |
| | | for (TaskProtocol taskProtocol : allTaskProtocol.values()){ |
| | | if (taskProtocol.getTaskStatus() == 2){//取 |
| | | endP = taskProtocol.getTargetPosition(); |
| | | sign = false; |
| | | } else if (taskProtocol.getTaskStatus() == 3 && sign){//放 |
| | | endP = taskProtocol.getTargetPosition(); |
| | | } |
| | | } |
| | | if (endP == 0){ |
| | | if (itSmall){ |
| | | endP = System.currentTimeMillis(); |
| | | } |
| | | } |
| | | Long[] longList = {taskWrk.getWrkNo().longValue(),startP,endP}; |
| | | arrayListAll.add(longList); |
| | | } |
| | | } else { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); |
| | | |
| | | try { |
| | | long startP = 0; |
| | | long endP = 0; |
| | | ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); |
| | | for (TaskProtocol taskProtocol : allTaskProtocol.values()){ |
| | | if (taskProtocol.getTaskStatus() == 2){//取 |
| | | startP = taskProtocol.getTargetPosition(); |
| | | } else if (taskProtocol.getTaskStatus() == 3){//放 |
| | | endP = taskProtocol.getTargetPosition(); |
| | | } |
| | | } |
| | | if (startP == 0 ){ |
| | | if (!itSmall){ |
| | | startP = System.currentTimeMillis(); |
| | | } |
| | | } |
| | | if (endP == 0){ |
| | | if (itSmall){ |
| | | endP = System.currentTimeMillis(); |
| | | } |
| | | } |
| | | // taskNoNow |
| | | long parseLong = Long.parseLong(taskNoNow); |
| | | Long[] longList = {parseLong,startP,endP}; |
| | | arrayListAll.add(longList); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("任务过滤查询小车执行任务异常:"+e.getMessage()); |
| | | return new ArrayList<>(); |
| | | } |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | } |
| | | } |
| | | for (RgvSlave rgvSlave : slaveProperties.getRgv()) { |
| | | if (rgvDetection(rgvSlave)) { |
| | | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | TaskWrk taskWrk = deviceDetectionGetWrkNo(rgvStn); |
| | | if (taskWrk != null) { |
| | | if (!arrayListAllP.contains(taskWrk.getWrkNo())) { |
| | | arrayListAllP.add(taskWrk.getWrkNo()); |
| | | BasDevpPosition basDevpPositionSta = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStn.getStaNo())); |
| | | BasDevpPosition basDevpPositionEnd = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); |
| | | Long[] longList = {taskWrk.getWrkNo().longValue(),basDevpPositionSta.getPlcPosition(),basDevpPositionEnd.getPlcPosition()}; |
| | | arrayListAll.add(longList); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | List<Long[]> crossingPathsW = TrackUtils.findCrossingPathsW(arrayListAll); |
| | | List<Long> wrkNoList = new ArrayList<>(); |
| | | List<Long> signWrk = new ArrayList<>(); |
| | | for (Long[] longList : crossingPathsW) { |
| | | if (arrayListOld.contains(longList[0].toString()) || arrayListOld.contains(longList[1].toString())){ |
| | | signWrk.add(longList[0]); |
| | | signWrk.add(longList[1]); |
| | | continue; |
| | | } |
| | | if (!wrkNoList.contains(longList[0]) && !signWrk.contains(longList[0])) { |
| | | if (!wrkNoList.contains(longList[1]) && !signWrk.contains(longList[1])) { |
| | | wrkNoList.add(longList[0]); |
| | | } |
| | | } |
| | | signWrk.add(longList[0]); |
| | | signWrk.add(longList[1]); |
| | | } |
| | | for (Integer str : arrayListAllP) { |
| | | if (!signWrk.contains(str.longValue())) { |
| | | arrayListNew.add(str.toString()); |
| | | } |
| | | } |
| | | for (Long wrk : wrkNoList) { |
| | | arrayListNew.add(wrk.toString()); |
| | | } |
| | | |
| | | return arrayListNew; |
| | | } |
| | | |
| | | //获取起点与终点对象 |
| | |
| | | if (basCrnp.getInEnable().equals("Y")) { |
| | | boolean crnStnToLocDemo = this.crnStnToLocDemo(crnSlave, crnProtocol);// 入库 |
| | | if (crnStnToLocDemo){ |
| | | crnProtocol.setSignIntOut(true); |
| | | crnProtocol.setLastIo("O"); |
| | | } else if (!crnProtocol.isSignIntOut()){ |
| | | crnProtocol.setLastIo("O"); |
| | | } |
| | | } else if (basCrnp.getOutEnable().equals("Y")) { |
| | | boolean locToCrnStnDemo = this.locToCrnStnDemo(crnSlave, crnProtocol);// 出库 |
| | | if (locToCrnStnDemo && signIntOut[crnSlave.getId()-1] >= crnProtocol.getLocMastDemoCount()){ |
| | | if (!crnProtocol.isSignIntOut()){ |
| | | crnProtocol.setLastIo("I"); |
| | | } else if (locToCrnStnDemo && signIntOut[crnSlave.getId()-1] < crnProtocol.getLocMastDemoCount()){ |
| | | signIntOut[crnSlave.getId()-1] = signIntOut[crnSlave.getId()-1]+1; |
| | | } else { |
| | | boolean locToCrnStnDemo = this.locToCrnStnDemo(crnSlave, crnProtocol);// 出库 |
| | | if (locToCrnStnDemo && crnProtocol.isSignIntOut()){ |
| | | crnProtocol.setLastIo("I"); |
| | | } else if (locToCrnStnDemo){ |
| | | crnProtocol.setLastIo("I"); |
| | | crnProtocol.setSignIntOut(true); |
| | | } else if (!crnProtocol.isSignIntOut()){ |
| | | crnProtocol.setLastIo("I"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | // 如果最近一次是出库模式 |
| | | else if (crnProtocol.getLastIo().equals("O")) { |
| | | if (basCrnp.getOutEnable().equals("Y")) { |
| | | boolean locToCrnStnDemo = this.locToCrnStnDemo(crnSlave, crnProtocol);// 出库 |
| | | if (locToCrnStnDemo && signIntOut[crnSlave.getId()-1] >= crnProtocol.getLocMastDemoCount()){ |
| | | if (!crnProtocol.isSignIntOut()) { |
| | | crnProtocol.setLastIo("I"); |
| | | } else if (locToCrnStnDemo && signIntOut[crnSlave.getId()-1] < crnProtocol.getLocMastDemoCount()){ |
| | | signIntOut[crnSlave.getId()-1] = signIntOut[crnSlave.getId()-1]+1; |
| | | } else { |
| | | boolean locToCrnStnDemo = this.locToCrnStnDemo(crnSlave, crnProtocol);// 出库 |
| | | if (locToCrnStnDemo && crnProtocol.isSignIntOut()){ |
| | | crnProtocol.setLastIo("I"); |
| | | } else if (locToCrnStnDemo){ |
| | | crnProtocol.setLastIo("I"); |
| | | crnProtocol.setSignIntOut(true); |
| | | } else if (!crnProtocol.isSignIntOut()){ |
| | | crnProtocol.setLastIo("I"); |
| | | } |
| | | } |
| | | } else if (basCrnp.getInEnable().equals("Y")) { |
| | | boolean crnStnToLocDemo = this.crnStnToLocDemo(crnSlave, crnProtocol);// 入库 |
| | | if (crnStnToLocDemo){ |
| | | crnProtocol.setSignIntOut(true); |
| | | crnProtocol.setLastIo("O"); |
| | | } else if (!crnProtocol.isSignIntOut()){ |
| | | crnProtocol.setLastIo("O"); |
| | | } |
| | | } |
| | |
| | | // 获取工作状态为2(设备上走)的入库工作档 |
| | | TaskWrk taskWrk = null; |
| | | for (String locNo : crnProtocol.getLocMastDemoList()) { |
| | | TaskWrk taskWrk1 = taskWrkService.selectByTaskNo(locNo); |
| | | TaskWrk taskWrk1 = taskWrkService.selectByTaskNo(locNo+"r"); |
| | | if (Cools.isEmpty(taskWrk1)){ |
| | | continue; |
| | | } |
| | |
| | | if (taskWrkMapper.updateById(taskWrk) == 0) { |
| | | log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", taskWrk.getWrkNo()); |
| | | } |
| | | |
| | | |
| | | } catch (Exception e) { |
| | | log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", taskWrk.getWrkNo()); |
| | | log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,异常:" + e); |
| | |
| | | if (Cools.isEmpty(basCrnp.getHpMk()) || !basCrnp.getHpMk().equals("Y")){ |
| | | continue; |
| | | } |
| | | for (String locNo : crnProtocol.getLocMastDemoList()){ |
| | | LocMast locMast = locMastService.selectByLocNo(locNo); |
| | | if (locMast.getLocSts().equals("F")){ |
| | | CarryParam carryParam = new CarryParam(); |
| | | carryParam.setTaskNo(locNo); |
| | | carryParam.setBarcode(locNo); |
| | | carryParam.setIoType(1);//任务类型=》1:出库、2:移库、3:入库 ====转换为====> 1:入库,2:出库,3:移库 |
| | | carryParam.setTaskPriority(1); |
| | | carryParam.setTargetPoint("1012"); |
| | | carryParam.setStartPoint(BarcodeUtils.formatCode(locNo)); |
| | | carryParam.setMeno("Demo"); |
| | | taskWrkController.addTaskPoint(carryParam); |
| | | Thread.sleep(50); |
| | | } else if (locMast.getLocSts().equals("O")){ |
| | | CarryParam carryParam = new CarryParam(); |
| | | carryParam.setTaskNo(locNo); |
| | | carryParam.setBarcode(locNo); |
| | | carryParam.setIoType(3);//任务类型=》1:出库、2:移库、3:入库 ====转换为====> 1:入库,2:出库,3:移库 |
| | | carryParam.setTaskPriority(1); |
| | | carryParam.setStartPoint("1012"); |
| | | carryParam.setTargetPoint(BarcodeUtils.formatCode(locNo)); |
| | | carryParam.setMeno("Demo"); |
| | | taskWrkController.addTaskPoint(carryParam); |
| | | Thread.sleep(50); |
| | | boolean signIn = false; |
| | | for (String[] locS : crnProtocol.getLocMastDemoListSign()){ |
| | | if (locS[3].equals(String.valueOf(crnProtocol.getLocMastDemoListSign().size()))){ |
| | | String locNo1 = locS[0]; |
| | | String locNo2 = locS[2]; |
| | | ArrayList<String> locNoList = new ArrayList<>(); |
| | | locNoList.add(locNo1); |
| | | locNoList.add(locNo2); |
| | | for (String locNo : locNoList) { |
| | | TaskWrk taskWrk1 = taskWrkService.selectByTaskNo(locNo+"r"); |
| | | if (Cools.isEmpty(taskWrk1)){ |
| | | continue; |
| | | } |
| | | signIn = true; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | if (signIn){ |
| | | continue; |
| | | } |
| | | for (String[] locS : crnProtocol.getLocMastDemoListSign()){ |
| | | if (locS[3].equals("1")){ |
| | | String locNo1 = locS[0]; |
| | | String locNo2 = locS[2]; |
| | | ArrayList<String> locNoList = new ArrayList<>(); |
| | | locNoList.add(locNo1); |
| | | locNoList.add(locNo2); |
| | | for (String locNo : locNoList) { |
| | | LocMast locMast = locMastService.selectByLocNo(locNo); |
| | | if (locMast.getLocSts().equals("F")){ |
| | | CarryParam carryParam = new CarryParam(); |
| | | carryParam.setTaskNo(locNo); |
| | | carryParam.setBarcode(locNo); |
| | | carryParam.setIoType(1);//任务类型=》1:出库、2:移库、3:入库 ====转换为====> 1:入库,2:出库,3:移库 |
| | | carryParam.setTaskPriority(1); |
| | | carryParam.setTargetPoint("1012"); |
| | | carryParam.setStartPoint(BarcodeUtils.formatCode(locNo)); |
| | | carryParam.setMeno("Demo"); |
| | | taskWrkController.addTaskPoint(carryParam); |
| | | } else if (locMast.getLocSts().equals("O")){ |
| | | CarryParam carryParam = new CarryParam(); |
| | | carryParam.setTaskNo(locNo+"r"); |
| | | carryParam.setBarcode(locNo); |
| | | carryParam.setIoType(3);//任务类型=》1:出库、2:移库、3:入库 ====转换为====> 1:入库,2:出库,3:移库 |
| | | carryParam.setTaskPriority(1); |
| | | carryParam.setStartPoint("1012"); |
| | | carryParam.setTargetPoint(BarcodeUtils.formatCode(locNo)); |
| | | carryParam.setMeno("Demo"); |
| | | taskWrkController.addTaskPoint(carryParam); |
| | | LocFCSUtils.updateLocSInPlace(crnProtocol.getLocMastDemoListSign()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |