| | |
| | | private WaitPakinMapper waitPakinMapper; |
| | | @Autowired |
| | | private LocMastService locMastService; |
| | | |
| | | @Resource |
| | | private LocMastMapper locMastMapper; |
| | | @Autowired |
| | | private StaDescService staDescService; |
| | | @Autowired |
| | |
| | | // 尺寸检测异常 |
| | | boolean back = false; |
| | | String errMsg = ""; |
| | | // if (staProtocol.isFrontErr()) { |
| | | // errMsg = "前超限"; |
| | | // back = true; |
| | | // } |
| | | // if (!back && staProtocol.isBackErr()) { |
| | | // errMsg = "后超限"; |
| | | // back = true; |
| | | // } |
| | | // if (!back && staProtocol.isHighErr()) { |
| | | // errMsg = "高超限"; |
| | | // back = true; |
| | | // } |
| | | // if (!back && staProtocol.isLeftErr()) { |
| | | // errMsg = "左超限"; |
| | | // back = true; |
| | | // } |
| | | // if (!back && staProtocol.isRightErr()) { |
| | | // errMsg = "右超限"; |
| | | // back = true; |
| | | // } |
| | | // if (!back && staProtocol.isWeightErr()) { |
| | | // errMsg = "超重"; |
| | | // back = true; |
| | | // } |
| | | // if (!back && staProtocol.isBarcodeErr()) { |
| | | // errMsg = "扫码失败"; |
| | | // back = true; |
| | | // } |
| | | if (staProtocol.isFrontErr()) { |
| | | errMsg = "前超限"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isBackErr()) { |
| | | errMsg = "后超限"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isHighErr()) { |
| | | errMsg = "高超限"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isLeftErr()) { |
| | | errMsg = "左超限"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isRightErr()) { |
| | | errMsg = "右超限"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isWeightErr()) { |
| | | errMsg = "超重"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isBarcodeErr()) { |
| | | errMsg = "扫码失败"; |
| | | back = true; |
| | | } |
| | | // 退回 |
| | | if (back && staProtocol.isInEnable() && staProtocol.isLoading() && staProtocol.getWorkNo() == 0) { |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg)); |
| | |
| | | continue; |
| | | } |
| | | |
| | | } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { |
| | | } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("M")|| shallowLoc.getLocSts().equals("Z")) { |
| | | News.warnNoLog(""+mark+" - 1"+" - 12"+" - // F、D 库位状态={}",shallowLoc.getLocSts()); |
| | | // 此标记避免多次执行移库任务 |
| | | if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) { |
| | |
| | | if (config != null && config.getStatus() == 1) { |
| | | crnAvailableOut = true; |
| | | } |
| | | // 限制去捆绑机器任务数 |
| | | int kbWrks = wrkMastMapper.selectCountByKb(); |
| | | for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) { |
| | | // 获取工作状态为11(生成出库ID)的出库工作档 |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo()); |
| | | for (WrkMast wrkMast : wrkMasts) { |
| | | if (wrkMast == null) { |
| | | continue; |
| | | } |
| | | if (wrkMast.getStaNo() == 1031) { |
| | | // 获取1033无状态时任务数+1 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | StaProtocol staProtocol = devpThread.getStation().get(1033); |
| | | if (staProtocol.isLoading() && staProtocol.getWorkNo() == 0) { |
| | | kbWrks ++; |
| | | } |
| | | if (kbWrks > 1) { |
| | | continue; |
| | | } |
| | | } |
| | | // 工作档状态判断 |
| | | if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null) { |
| | |
| | | |
| | | } |
| | | } |
| | | } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { |
| | | } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("M")|| shallowLoc.getLocSts().equals("Z")) { |
| | | News.warnNoLog(""+mark+" - 2"+" - 9"+" - // F、D 库位状态={}",shallowLoc.getLocSts()); |
| | | // WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); |
| | | //2022-08-16 modify,不根据updmk标记移库任务(容易被取消导致堵塞),查询工作档是否存在任务 |
| | |
| | | // 空桶入库完成,先完成对应库位组任务 |
| | | if(wrkMast.getWorkNoOther() != 0 ){ |
| | | WrkMast wrkMast1 = wrkMastService.selectByWrkNo(wrkMast.getWorkNoOther()); |
| | | // 交换库位号 |
| | | String locNo = wrkMast.getLocNo(); |
| | | wrkMast.setLocNo(wrkMast1.getLocNo()); |
| | | // 交换入库时间,提取库存时按顺序先浅后深 |
| | | Date ioTime = wrkMast.getIoTime(); |
| | | if(locNo.startsWith("10")) { |
| | | wrkMast.setIoTime(wrkMast1.getIoTime()); |
| | | wrkMast1.setIoTime(ioTime); |
| | | if (wrkMast1 != null) { |
| | | // 交换库位号 |
| | | String locNo = wrkMast.getLocNo(); |
| | | wrkMast.setLocNo(wrkMast1.getLocNo()); |
| | | // 交换入库时间,提取库存时按顺序先浅后深 |
| | | Date ioTime = wrkMast.getIoTime(); |
| | | if(locNo.startsWith("10")) { |
| | | wrkMast.setIoTime(wrkMast1.getIoTime()); |
| | | wrkMast1.setIoTime(ioTime); |
| | | } |
| | | wrkMast1.setLocNo(locNo); |
| | | wrkMast1.setCrnEndTime(now); |
| | | wrkMast1.setModiTime(now); |
| | | wrkMast1.setWrkSts(4L); |
| | | wrkMast1.setWorkNoOther(0); |
| | | wrkMastMapper.updateById(wrkMast1); |
| | | } |
| | | wrkMast1.setLocNo(locNo); |
| | | wrkMast1.setCrnEndTime(now); |
| | | wrkMast1.setModiTime(now); |
| | | wrkMast1.setWrkSts(4L); |
| | | wrkMast1.setWorkNoOther(0); |
| | | wrkMastMapper.updateById(wrkMast1); |
| | | } |
| | | wrkMast.setCrnEndTime(now); |
| | | wrkMast.setModiTime(now); |
| | |
| | | basCrnpService.updateById(basCrnp); // 设置更新时间,避免重复下发回原点 |
| | | log.info("{}号堆垛机回原点任务下发成功:{}", crn.getId(), JSON.toJSON(crnCommand)); |
| | | } |
| | | Thread.sleep(2000); |
| | | Thread.sleep(3000); |
| | | } |
| | | } |
| | | } |
| | |
| | | */ |
| | | private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc,Integer mark) { |
| | | |
| | | // 只有208L能放11层 |
| | | String model = null; |
| | | if(shallowLoc.getLocSts().equals("F")) { |
| | | LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", shallowLoc.getLocNo())); |
| | | if(locDetl != null && locDetl.getModel() != null) { |
| | | String matModel = locMastMapper.selectMatMatnrByMaktx(locDetl.getModel()); |
| | | if(matModel != null && matModel.equals("208L")) { |
| | | model = "208L"; |
| | | } |
| | | } |
| | | } |
| | | try { |
| | | News.warnNoLog(""+mark+"moveLocForDeepLoc"+" - 0"+" - 开始执行:因双深库位阻塞,对浅库位进行移转(立即执行版)"); |
| | | List<Integer> rows = locMastService.queryDistinctRow(crn.getId()); |
| | | LocMast loc = null; |
| | | for (Integer row : rows) { |
| | | if (Utils.isDeepLoc(slaveProperties, row)) { |
| | | loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2()); |
| | | // loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2()); |
| | | loc = locMastMapper.queryFreeLocMastNew(row,model); |
| | | |
| | | if (loc != null) { |
| | | if (Utils.isDeepLoc(slaveProperties, loc.getLocNo())) { |
| | |
| | | if (null == loc) { |
| | | for (Integer row : rows) { |
| | | if (Utils.isShallowLoc(slaveProperties, row)) { |
| | | loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2()); |
| | | |
| | | // loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2()); |
| | | loc = locMastMapper.queryFreeLocMastNew(row,model); |
| | | if (null != loc) {//对应深库位非在库状态,不能移库 |
| | | String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo()); |
| | | LocMast deepLoc1 = locMastService.selectById(deepLoc); |
| | | if (!deepLoc1.getLocSts().equals("F") && !deepLoc1.getLocSts().equals("D")) { |
| | | if (!deepLoc1.getLocSts().equals("F") && !deepLoc1.getLocSts().equals("M")&& !deepLoc1.getLocSts().equals("Z")) { |
| | | loc = null; |
| | | } |
| | | } |
| | |
| | | wrkMast.setFullPlt(shallowLoc.getLocSts().equals("F") ? "Y" : "N"); // 满板 |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 空板 |
| | | wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("M") ? "M" : shallowLoc.getLocSts().equals("Z") ? "Z" : "N"); // 空板 |
| | | wrkMast.setBarcode(shallowLoc.getBarcode()); // 托盘码 |
| | | wrkMast.setLinkMis("N"); |
| | | wrkMast.setAppeTime(new Date()); |
| | |
| | | } |
| | | } |
| | | // 修改源库位状态 |
| | | if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) { |
| | | if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("M") || shallowLoc.getLocSts().equals("Z")) { |
| | | shallowLoc.setLocSts("R"); // R.出库预约 |
| | | shallowLoc.setModiTime(new Date()); |
| | | if (!locMastService.updateById(shallowLoc)) { |
| | |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.isInEnable() || staProtocol.isOutEnable() && site == 1090) && staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() < 9000) { |
| | | if (staProtocol.getWorkNo() == 1034 && !staProtocol.isHigh()) { // 1034空母拖回流任务需要高信号 |
| | | return; |
| | | if (staProtocol.getSiteId() == 1034 && !staProtocol.isHigh()) { // 1034空母拖回流任务需要高信号 |
| | | continue; |
| | | } |
| | | // 查询工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo()); |
| | |
| | | DevpThread devpThread2 = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | StaProtocol staProtocol2 = devpThread2.getStation().get(1090); |
| | | if(!staProtocol2.isAutoing() || staProtocol2.isLoading() || staProtocol2.getWorkNo() != 0) { |
| | | log.info("去异常口目标站点,非自动,有物,工作号为:{}",staProtocol2.getWorkNo()); |
| | | log.info("{}去异常口目标站点,自动:{},有物:{},工作号为:{}",wrkMast.getWrkNo(),staProtocol2.isAutoing(),staProtocol2.isLoading(),staProtocol2.getWorkNo()); |
| | | continue; |
| | | } |
| | | int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().where("sta_no = 1090 and wrk_sts in (9,10)")); |
| | | int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().where("sta_no = 1090 AND (wrk_sts IN (9,10) OR (wrk_sts = 2 AND rgv_finish_time IS NOT NULL))")); |
| | | if (count > 0) { |
| | | log.info("去异常口,但是前面有去异常口任务数:{}",count); |
| | | log.info("{}去异常口,但是前面有去异常口任务数:{}",wrkMast.getWrkNo(),count); |
| | | continue; |
| | | } |
| | | } |
| | |
| | | /** |
| | | * rgv放货完成,给输送线下发任务 |
| | | */ |
| | | public synchronized void rgvToDev() { |
| | | public synchronized void rgvToDev() throws InterruptedException { |
| | | for (Integer site : rgvConnectionSiteList) { |
| | | // 输送线plc编号 |
| | | Integer devpPlcId = site < 1044 ? 1 : site <= 1090 ? 2 : 3; |
| | |
| | | wrkMast.setWrkSts(15L); |
| | | wrkMast.setModiTime(new Date()); |
| | | wrkMastService.updateById(wrkMast); |
| | | } else if(wrkMast.getIoType() == 110 && (wrkMast.getStaNo() == 1002 || wrkMast.getStaNo() == 1020 ||wrkMast.getStaNo() == 1035)) { |
| | | } else if(wrkMast.getIoType() == 110 && (wrkMast.getStaNo() == 1002 || wrkMast.getStaNo() == 1020 ||wrkMast.getStaNo() == 1035 || wrkMast.getStaNo() == 1024)) { |
| | | if(wrkMast.getWrkSts() != 2 ){ |
| | | log.warn("rgv放货完成110,rgv未复位:rgv号{},任务号:{},任务状态{}",wrkMast.getRgvNo(),wrkMast.getWrkNo(),wrkMast.getWrkSts()); |
| | | continue; |
| | |
| | | staProtocol.setWorkNo(staProtocol.getHideWorkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); |
| | | if (!MessageQueue.offer(SlaveType.Devp, devpPlcId, new Task(2, staProtocol))) { |
| | | log.info("rgv搬运完成给输送线下发命令失败!,plc id:{},站点{},任务号:{},目标站:{}", devpPlcId,staProtocol.getStaNo(), staProtocol.getWorkNo(), staProtocol.getStaNo()); |
| | | log.info("rgv搬运完成给输送线下发命令失败!,plc id:{},站点{},任务号:{},目标站:{}", devpPlcId,staProtocol.getSiteId(), staProtocol.getWorkNo(), staProtocol.getStaNo()); |
| | | } else { |
| | | log.info("rgv搬运完成给输送线下发命令成功plc id:{}!,站点{},任务号:{},目标站:{}", devpPlcId,staProtocol.getStaNo(), staProtocol.getWorkNo(), staProtocol.getStaNo()); |
| | | log.info("rgv搬运完成给输送线下发命令成功plc id:{}!,站点{},任务号:{},目标站:{}", devpPlcId,staProtocol.getSiteId(), staProtocol.getWorkNo(), staProtocol.getStaNo()); |
| | | } |
| | | Thread.sleep(300); |
| | | } |
| | | } |
| | | } |