| | |
| | | param.setBarcode(barcode); |
| | | param.setIoType(1); |
| | | param.setSourceStaNo(inSta.getStaNo()); |
| | | param.setLocType1(locTypeDto.getLocType1()); |
| | | // param.setLocType1(locTypeDto.getLocType1()); |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/rpc/pakin/loc/v1") |
| | |
| | | } |
| | | } |
| | | // 库位移转 |
| | | this.locToLoc(crn, crnProtocol); |
| | | // this.locToLoc(crn, crnProtocol); |
| | | } |
| | | } |
| | | } |
| | |
| | | log.error("调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo()); |
| | | } |
| | | //20220719 Add,如果浅库位状态为P/R,工作状态为14/15,说明浅库位已经空了,可以执行入库任务 |
| | | continue; |
| | | } |
| | | } |
| | | continue; |
| | | } |
| | | if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { |
| | | // 此标记避免多次执行移库任务 |
| | |
| | | Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo()); |
| | | // 有小车 |
| | | if (steNo != null) { |
| | | // 小车行走到堆垛机待搬移点 |
| | | // 小车行走到待机位 |
| | | if (wrkMast.getWrkSts() == 2L && wrkMast.getSteNo() == null) { |
| | | // 没有其他任务 |
| | | if (null == wrkMastMapper.selectPakin(slave.getId(), steNo)) { |
| | |
| | | } |
| | | |
| | | // 置顶任务 |
| | | wrkMast.setIoPri((double) 9999); |
| | | wrkMast.setIoPri((double) 9998); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | |
| | | // 判断是否为穿梭库 |
| | | if (!locMastService.isShuttle(wrkMast.getLocNo())) { |
| | | if (!locMastService.isShuttle(wrkMast.getSourceLocNo())) { |
| | | |
| | | // 双深库位且浅库位有货,则需先对浅库位进行库位移转 |
| | | if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) { |
| | |
| | | log.error("{}库位异常,未检索到相应工作档!", shallowLocNo); |
| | | } else { |
| | | if(waitWrkMast.getWrkSts() == 11) { |
| | | waitWrkMast.setIoPri(20D); |
| | | waitWrkMast.setIoPri(wrkMast.getIoPri() + 1); |
| | | waitWrkMast.setModiTime(new Date()); |
| | | if (wrkMastMapper.updateById(waitWrkMast) == 0) { |
| | | log.error("调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo()); |
| | |
| | | wrkMast.setSteNo(steNo); |
| | | wrkMast.setCrnStrTime(now); |
| | | wrkMast.setModiTime(now); |
| | | LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo()); |
| | | Integer outCrnNo = locMastService.getOutCrnNo(locMast); |
| | | wrkMast.setCrnNo(outCrnNo); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 11.生成出库ID => 14.小车搬出库 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | |
| | | /** |
| | | * 库位移转 |
| | | */ |
| | | @Deprecated |
| | | public void locToLoc(CrnSlave slave, CrnProtocol crnProtocol){ |
| | | // 获取工作档信息 |
| | | WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId()); |
| | |
| | | SteProtocol steProtocol = steThread.getSteProtocol(); |
| | | if (steProtocol == null) { continue; } |
| | | if (!steProtocol.isIdle()) { continue; } |
| | | if (steProtocol.getRow() == 1) { continue; } |
| | | String locNo = wrkMast.getWrkSts() < 10 ? wrkMast.getLocNo() : wrkMast.getSourceLocNo(); |
| | | // 如果在同一个库位组 |
| | | if (Utils.getGroupRow(locNo, true).equals(Utils.getGroupRow(steProtocol.getRow().intValue(), true)) |
| | | && steProtocol.getBay().intValue() == Utils.getBay(locNo) |
| | | && steProtocol.getLev().intValue() == Utils.getLev(locNo)) { |
| | | return steThread; |
| | | } |
| | | LocMast locMast = locMastService.selectById(locNo); |
| | | int lev = locMast.getLev1(); |
| | | int bay = locMast.getBay1(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 让小车从 远点 ====>> 待机 |
| | | * 等待堆垛机搬运 |
| | | * 让小车行走至待机位 |
| | | */ |
| | | public void letCarBeWaiting(WrkMast wrkMast, Integer steNo, String locNo) { |
| | | // 获取穿梭车信息 |
| | |
| | | if (steProtocol == null) { return; } |
| | | if (steProtocol.isIdle()) { |
| | | |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | SteCommand steCommand = new SteCommand(); |
| | | steCommand.setSteNo(steNo); // 穿梭车编号 |
| | | steCommand.setTaskNo(wrkMast.getWrkNo()); // 工作号 |
| | | steCommand.setTaskMode(SteTaskModeType.findWaiting(steProtocol.getRow().intValue())); // 任务模式: 去近点 等待堆垛机叉取 |
| | | |
| | | steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue()); |
| | | steCommand.setBay(steProtocol.getBay()); |
| | | steCommand.setLev(steProtocol.getLev()); |
| | | |
| | | if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) { |
| | | log.error("穿梭车命令下发失败,穿梭车号={},任务数据={}", steNo, JSON.toJSON(steCommand)); |
| | | } else { |
| | | // 如果处于待机位 |
| | | if (steProtocol.locaType.equals(SteLocaType.A_WAITING) || steProtocol.locaType.equals(SteLocaType.B_WAITING)) { |
| | | // 修改工作档状态 绑定穿梭车 |
| | | wrkMast.setWrkSts(3L); |
| | | wrkMast.setSteNo(steNo); |
| | | wrkMast.setModiTime(new Date()); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 绑定穿梭车 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | } else { |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | SteCommand steCommand = new SteCommand(); |
| | | steCommand.setSteNo(steNo); // 穿梭车编号 |
| | | steCommand.setTaskNo(wrkMast.getWrkNo()); // 工作号 |
| | | steCommand.setTaskMode(SteTaskModeType.findWaiting(steProtocol.getRow().intValue())); // 任务模式: 行走至待机位 |
| | | |
| | | steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue()); |
| | | steCommand.setBay(steProtocol.getBay()); |
| | | steCommand.setLev(steProtocol.getLev()); |
| | | |
| | | if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) { |
| | | log.error("穿梭车命令下发失败,穿梭车号={},任务数据={}", steNo, JSON.toJSON(steCommand)); |
| | | } else { |
| | | // 修改工作档状态 绑定穿梭车 |
| | | wrkMast.setSteNo(steNo); |
| | | wrkMast.setModiTime(new Date()); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 绑定穿梭车 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | Date now = new Date(); |
| | | wrkMast.setCrnEndTime(now); |
| | | wrkMast.setModiTime(now); |
| | | LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo()); |
| | | Integer outCrnNo = locMastService.getOutCrnNo(locMast); |
| | | wrkMast.setCrnNo(outCrnNo); |
| | | // 修改成功后复位堆垛机 |
| | | if (wrkMastMapper.updateById(wrkMast) > 0) { |
| | | // 堆垛机复位 |
| | |
| | | if (null != wrkChargeService.selectWorking(null, WrkChargeType.reset)) { |
| | | return; |
| | | } |
| | | if (null != wrkChargeService.selectWorking(null, WrkChargeType.charge)) { |
| | | return; |
| | | } |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | for (SteSlave ste : slaveProperties.getSte()) { |
| | | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId()); |
| | |
| | | if (steProtocol.getCharge() > Float.parseFloat(basSte.getChargeLine())) { |
| | | continue; |
| | | } |
| | | WrkCharge wrkCharge = wrkChargeService.selectWorking(ste.getId(), WrkChargeType.charge); |
| | | WrkCharge wrkCharge = wrkChargeService.selectWorking(null, WrkChargeType.charge); |
| | | |
| | | if (wrkCharge == null && steProtocol.getChargeStatus() == 0) { |
| | | // 寻找空闲充电桩 |
| | |
| | | do { |
| | | String locNo; |
| | | if (!devpThread.charge0) { |
| | | locNo = SteChargeType.FIRST.locNo; |
| | | if (basSteService.hasCarOfLocNo(locNo) == null) { |
| | | steCharge = SteChargeType.FIRST; |
| | | SteChargeType first = SteChargeType.FIRST; |
| | | locNo = first.locNo; |
| | | if (basSteService.hasCarOfLocNo(locNo) == null |
| | | && wrkChargeService.selectWorkingOfCharge(first.ssbm) == null) { |
| | | steCharge = first; |
| | | break; |
| | | } |
| | | } |
| | | if (!devpThread.charge1) { |
| | | locNo = SteChargeType.SECOND.locNo; |
| | | if (basSteService.hasCarOfLocNo(locNo) == null) { |
| | | steCharge = SteChargeType.SECOND; |
| | | SteChargeType second = SteChargeType.SECOND; |
| | | locNo = second.locNo; |
| | | if (basSteService.hasCarOfLocNo(locNo) == null |
| | | && wrkChargeService.selectWorkingOfCharge(second.ssbm) == null) { |
| | | steCharge = second; |
| | | break; |
| | | } |
| | | } |
| | | if (!devpThread.charge2) { |
| | | locNo = SteChargeType.THIRD.locNo; |
| | | if (basSteService.hasCarOfLocNo(locNo) == null) { |
| | | steCharge = SteChargeType.THIRD; |
| | | SteChargeType third = SteChargeType.THIRD; |
| | | locNo = third.locNo; |
| | | if (basSteService.hasCarOfLocNo(locNo) == null |
| | | && wrkChargeService.selectWorkingOfCharge(third.ssbm) == null) { |
| | | steCharge = third; |
| | | break; |
| | | } |
| | | } |
| | |
| | | } else { |
| | | this.letCarBeWaiting(wrkCharge, ste.getId()); |
| | | } |
| | | |
| | | break; |
| | | } |
| | | } catch (Exception e) { |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | |
| | | public synchronized void queryChargeLocOfComplete() { |
| | | // 与充电任务不同步进行 |
| | | if (null != wrkChargeService.selectWorking(null, WrkChargeType.charge)) { return; } |
| | | if (null != wrkChargeService.selectWorking(null, WrkChargeType.reset)) { return; } |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | // 检索充电桩 |
| | | for (SteChargeType value : SteChargeType.values()) { |
| | |
| | | if (Cools.isEmpty(steProtocol, basSte)) { |
| | | continue; |
| | | } |
| | | // 1号充电桩 |
| | | if (value.equals(SteChargeType.FIRST) && devpThread.charge0) { |
| | | if (steProtocol.getCharge() < 99) { |
| | | continue; |
| | | } |
| | | // 2号充电桩 |
| | | if (value.equals(SteChargeType.SECOND) && devpThread.charge1) { |
| | | if (steProtocol.getMode() == 0) { |
| | | continue; |
| | | } |
| | | // 3号充电桩 |
| | | if (value.equals(SteChargeType.THIRD) && devpThread.charge2) { |
| | | if (!steProtocol.getStatusType().equals(SteStatusType.IDLE)) { |
| | | continue; |
| | | } |
| | | // 小车是否处于充电状态 |
| | | if (steProtocol.getChargeStatus() == 1) { |
| | | continue; |
| | | } |
| | | // // 1号充电桩 |
| | | // if (value.equals(SteChargeType.FIRST) && devpThread.charge0) { |
| | | // continue; |
| | | // } |
| | | // // 2号充电桩 |
| | | // if (value.equals(SteChargeType.SECOND) && devpThread.charge1) { |
| | | // continue; |
| | | // } |
| | | // // 3号充电桩 |
| | | // if (value.equals(SteChargeType.THIRD) && devpThread.charge2) { |
| | | // continue; |
| | | // } |
| | | // // 小车是否处于充电状态 |
| | | // if (steProtocol.getChargeStatus() == 1) { |
| | | // continue; |
| | | // } |
| | | // case 1 : 自动充电开 馈电 × |
| | | // case 2 : 自动充电开 满电 ✔ |
| | | // case 3 : 自动充电关 馈电 ✔ |
| | |
| | | wrkCharge.setAppeTime(new Date()); |
| | | if (!wrkChargeService.insert(wrkCharge)) { |
| | | log.error("保存{}号穿梭车复位任务失败!!!", steNo); |
| | | } else { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | |
| | | crnCommand.setTaskNo(wrkCharge.getWrkNo().shortValue()); // 工作号 |
| | | crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 任务模式: 库位移转 |
| | | crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosX(steProtocol.getRow()); // 源库位排 |
| | | crnCommand.setSourcePosY(steProtocol.getBay()); // 源库位列 |
| | | crnCommand.setSourcePosZ(steProtocol.getLev()); // 源库位层 |
| | | crnCommand.setDestinationPosX(Utils.getGroupRow(channelLoc.getLocNo(), false).shortValue()); // 目标库位排 |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | if (null != loc) { |
| | | break; |