| | |
| | | } |
| | | // 没有小车 |
| | | } else { |
| | | // 堆垛机入库 |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | // 堆垛机入库 命令下发区 -------------------------------------------------------------------------- |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 |
| | |
| | | wrkMast.setCrnStrTime(now); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 {} => 3.吊车入库中 失败!!,工作号={}", wrkMast.getWrkSts$(), wrkMast.getWrkNo()); |
| | | log.error("修改工作档状态 {} => 7.吊车入库中 失败!!,工作号={}", wrkMast.getWrkSts$(), wrkMast.getWrkNo()); |
| | | } |
| | | return true; |
| | | } |
| | |
| | | |
| | | // 目标库位 ===>> 非最外层库位 |
| | | } else { |
| | | // 判断小车是否在当前组库位,如果是则堆垛机将货物放置小车上,如果不是,则直接堆垛机搬移小车至当前组的最外层库位 |
| | | // 判断小车是否在当前组库位,如果是则将穿梭车移至最外层,等待堆垛机放货;如果不是,则堆垛机寻找穿梭车,并放置当前组最外层 |
| | | Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo()); |
| | | // 有小车 |
| | | if (steNo != null) { |
| | | // 小车行走到堆垛机待搬移点 |
| | | if (wrkMast.getWrkSts() == 2L) { |
| | | this.letCarBeReady(wrkMast, steNo); |
| | | } |
| | | // 堆垛机将货放至小车上 3.小车待搬 ===>> 7.吊车入库中 |
| | | if (wrkMast.getWrkSts() == 3L) { |
| | | // 小车处于空闲 |
| | | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); |
| | | SteProtocol steProtocol = steThread.getSteProtocol(); |
| | | if (steProtocol == null) { continue; } |
| | | if (steProtocol.getStatusType().equals(SteStatusType.IDLE)) { |
| | | // 堆垛机入库 命令下发区 -------------------------------------------------------------------------- |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 |
| | | crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式: 库位移转 |
| | | crnCommand.setSourcePosX(crnStn.getRow().shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosY(crnStn.getBay().shortValue()); // 源库位列 |
| | | crnCommand.setSourcePosZ(crnStn.getLev().shortValue()); // 源库位层 |
| | | crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo()).shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | } else { |
| | | // 修改工作档状态 3.小车待搬 ===>> 7.吊车入库中 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(7L); |
| | | wrkMast.setCrnStrTime(now); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 3.小车待搬 => 7.吊车入库中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | // 没有小车 |
| | | } else { |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | |
| | | /** |
| | | * 当前库位组是否存在空闲小车 |
| | | * @param locNo |
| | | * @return |
| | | */ |
| | | public Integer hasCarOfIdle(String locNo) { |
| | | for (SteSlave ste : slaveProperties.getSte()) { |
| | |
| | | // 修改工作档状态 2.设备上走 => 3.小车待搬 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(3L); |
| | | wrkMast.setSteNo(steNo); |
| | | wrkMast.setCrnStrTime(now); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 穿梭车入库 |
| | | */ |
| | | public void carGenerateStore() { |
| | | for (SteSlave ste : slaveProperties.getSte()) { |
| | | // 获取堆垛机信息 |
| | | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId()); |
| | | SteProtocol steProtocol = steThread.getSteProtocol(); |
| | | if (steProtocol == null) { continue; } |
| | | if (steProtocol.getStatusType().equals(SteStatusType.IDLE)) { |
| | | |
| | | wrkMastMapper.selectPakInStep8() |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 堆垛机针对于小车迁移工作的完成 |
| | | */ |
| | | @Async |
| | |
| | | log.error("堆垛机处于等待确认且任务完成状态,但未找到工作档。堆垛机号={},工作号={}", crn.getId(), crnProtocol.getTaskNo()); |
| | | continue; |
| | | } |
| | | // 入库 + 库位转移 ==> 9.入库完成 |
| | | // 入库 + 库位转移 |
| | | if (wrkMast.getWrkSts() == 7 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)){ |
| | | wrkMast.setWrkSts(9L); |
| | | } else { |
| | | if (locMastService.isOutMost(wrkMast.getLocNo())) { |
| | | // ==> 9.入库完成 |
| | | wrkMast.setWrkSts(9L); |
| | | } else { |
| | | // ==> 8.小车搬入库 |
| | | wrkMast.setWrkSts(8L); |
| | | } |
| | | } else { |
| | | continue; |
| | | } |
| | | Date now = new Date(); |