|  |  |  | 
|---|
|  |  |  | log.error("{}号穿梭车重新定位失败!作业充电任务号:{}", wrkCharge.getSteNo(), wrkCharge.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else if (wrkCharge.getWrkSts() == 42) { | 
|---|
|  |  |  | // 42.吊车搬运 ===>> 43.小车到达 | 
|---|
|  |  |  | wrkCharge.setWrkSts(43L); | 
|---|
|  |  |  | if (!wrkChargeService.updateById(wrkCharge)) { | 
|---|
|  |  |  | log.error("修改复位任务状态 42.吊车搬运 ===>> 43.小车到达 失败!!,工作号={}", wrkCharge.getWrkNo()); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 堆垛机复位 | 
|---|
|  |  |  | crnThread.setResetFlag(true); | 
|---|
|  |  |  | // 穿梭车重新定位排列层 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkCharge.getSteNo()); | 
|---|
|  |  |  | if (!steThread.confirmPos()) { | 
|---|
|  |  |  | log.error("{}号穿梭车重新定位失败!作业复位任务号:{}", wrkCharge.getSteNo(), wrkCharge.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else if (wrkCharge.getWrkSts() == 46) { | 
|---|
|  |  |  | // 46.放至待机位 ===>> 47.复位成功 | 
|---|
|  |  |  | wrkCharge.setWrkSts(47L); | 
|---|
|  |  |  | if (!wrkChargeService.updateById(wrkCharge)) { | 
|---|
|  |  |  | log.error("修改复位任务状态 46.放至待机位 ===>> 47.复位成功 失败!!,工作号={}", wrkCharge.getWrkNo()); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 堆垛机复位 | 
|---|
|  |  |  | crnThread.setResetFlag(true); | 
|---|
|  |  |  | // 穿梭车重新定位排列层 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkCharge.getSteNo()); | 
|---|
|  |  |  | if (!steThread.confirmPos()) { | 
|---|
|  |  |  | log.error("{}号穿梭车重新定位失败!作业复位任务号:{}", wrkCharge.getSteNo(), wrkCharge.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | wrkCharge.setWrkSts(37L); | 
|---|
|  |  |  | if (!wrkChargeService.updateById(wrkCharge)) { | 
|---|
|  |  |  | log.error("修改演示任务状态 36.小车走行 ===>> 37.演示完成 失败!!,工作号={}", wrkCharge.getWrkNo()); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | steThread.setResetFlag(true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }  else if (wrkCharge.getWrkSts() == 44) { | 
|---|
|  |  |  | // 44.小车走行 ===>> 45.小车待搬 | 
|---|
|  |  |  | wrkCharge.setWrkSts(45L); | 
|---|
|  |  |  | if (!wrkChargeService.updateById(wrkCharge)) { | 
|---|
|  |  |  | log.error("修改演示任务状态 44.小车走行 ===>> 45.小车待搬 失败!!,工作号={}", wrkCharge.getWrkNo()); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | steThread.setResetFlag(true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | if (steProtocol.getCharge() > Float.parseFloat(basSte.getChargeLine())) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | WrkCharge wrkCharge = wrkChargeService.selectWorking(null); | 
|---|
|  |  |  | WrkCharge wrkCharge = wrkChargeService.selectWorking(null, "charge"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (wrkCharge == null && steProtocol.getChargeStatus() == 0) { | 
|---|
|  |  |  | // 寻找空闲充电桩 | 
|---|
|  |  |  | 
|---|
|  |  |  | crnCommand.setDestinationPosX(chargeLoc.getRow1().shortValue());     // 目标库位排 | 
|---|
|  |  |  | crnCommand.setDestinationPosY(chargeLoc.getBay1().shortValue());     // 目标库位列 | 
|---|
|  |  |  | crnCommand.setDestinationPosZ(chargeLoc.getLev1().shortValue());     // 目标库位层 | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Crn, 1, new Task(2, crnCommand))) { | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, crnCommand))) { | 
|---|
|  |  |  | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", crnNo, JSON.toJSON(crnCommand)); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 修改穿梭车运行中排列层 | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void steFromChargeToIdleLoc() { | 
|---|
|  |  |  | // 与充电任务不同步进行 | 
|---|
|  |  |  | if (null != wrkChargeService.selectWorking(null)) { return; } | 
|---|
|  |  |  | if (null != wrkChargeService.selectWorking(null, "charge")) { return; } | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
|---|
|  |  |  | // 检索充电桩 | 
|---|
|  |  |  | for (SteChargeType value : SteChargeType.values()) { | 
|---|
|  |  |  | 
|---|
|  |  |  | && steProtocol.getCharge() < Float.parseFloat(basSte.getChargeLine())) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 开始穿梭车复位任务 | 
|---|
|  |  |  | WrkCharge wrkCharge = new WrkCharge(); | 
|---|
|  |  |  | wrkCharge.setSteNo(steNo); | 
|---|
|  |  |  | wrkCharge.setWrkNo(commonService.getChargeWorkNo(6)); | 
|---|
|  |  |  | wrkCharge.setWrkSts(41L);   // 41.小车准备复位 | 
|---|
|  |  |  | wrkCharge.setCrnNo(2);  // 固定2号堆垛机 | 
|---|
|  |  |  | wrkCharge.setIoPri((double) 10); | 
|---|
|  |  |  | wrkCharge.setSourceLocNo(value.locNo); | 
|---|
|  |  |  | wrkCharge.setLocNo(basSte.getIdleLoc()); | 
|---|
|  |  |  | wrkCharge.setMemo("reset"); | 
|---|
|  |  |  | if (!wrkChargeService.insert(wrkCharge)) { | 
|---|
|  |  |  | log.error("保存{}号穿梭车复位任务失败!!!", steNo); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | WrkCharge wrkCharge = wrkChargeService.selectWorking(null, "reset"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (wrkCharge == null) { | 
|---|
|  |  |  | // 开始穿梭车复位任务 | 
|---|
|  |  |  | wrkCharge = new WrkCharge(); | 
|---|
|  |  |  | wrkCharge.setSteNo(steNo); | 
|---|
|  |  |  | wrkCharge.setWrkNo(commonService.getChargeWorkNo(6)); | 
|---|
|  |  |  | wrkCharge.setWrkSts(41L);   // 41.小车准备复位 | 
|---|
|  |  |  | wrkCharge.setCrnNo(2);  // 固定2号堆垛机 | 
|---|
|  |  |  | wrkCharge.setIoPri((double) 10); | 
|---|
|  |  |  | wrkCharge.setSourceLocNo(value.locNo); | 
|---|
|  |  |  | wrkCharge.setLocNo(basSte.getIdleLoc()); | 
|---|
|  |  |  | wrkCharge.setMemo("reset"); | 
|---|
|  |  |  | if (!wrkChargeService.insert(wrkCharge)) { | 
|---|
|  |  |  | log.error("保存{}号穿梭车复位任务失败!!!", steNo); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 1.搬运至固定通道 | 
|---|
|  |  |  | // 搬运至固定通道 | 
|---|
|  |  |  | if (wrkCharge.getWrkSts() == 41L) { | 
|---|
|  |  |  | // 搬小车至小车走向通道 | 
|---|
|  |  |  | List<String> channel = slaveProperties.getChannel(); | 
|---|
|  |  |  | 
|---|
|  |  |  | crnCommand.setDestinationPosX(Utils.getGroupRow(channelLoc.getLocNo(), false).shortValue());     // 目标库位排 | 
|---|
|  |  |  | crnCommand.setDestinationPosY(channelLoc.getBay1().shortValue());     // 目标库位列 | 
|---|
|  |  |  | crnCommand.setDestinationPosZ(channelLoc.getLev1().shortValue());     // 目标库位层 | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Crn, wrkCharge.getCrnNo(), new Task(2, crnCommand))) { | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, crnCommand))) { | 
|---|
|  |  |  | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkCharge.getCrnNo(), JSON.toJSON(crnCommand)); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 修改穿梭车运行中排列层 | 
|---|
|  |  |  | steThread.modifyPos(Utils.getGroupRow(channelLoc.getLocNo(), true), channelLoc.getBay1(), channelLoc.getLev1()); | 
|---|
|  |  |  | steThread.modifyPos(Utils.getGroupRow(channelLoc.getLocNo(), false), channelLoc.getBay1(), channelLoc.getLev1()); | 
|---|
|  |  |  | // 修改工作档状态 41.小车准备复位 => 42.吊车搬运 | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | wrkCharge.setWrkSts(42L); | 
|---|
|  |  |  | wrkCharge.setCrnStrTime(now); | 
|---|
|  |  |  | wrkCharge.setModiTime(now); | 
|---|
|  |  |  | if (!wrkChargeService.updateById(wrkCharge)) { | 
|---|
|  |  |  | log.error("修改工作档状态 41.小车准备复位 => 42.吊车搬运 失败!!,工作号={}", wrkCharge.getWrkNo()); | 
|---|
|  |  |  | log.error("修改复位任务状态 41.小车准备复位 => 42.吊车搬运 失败!!,工作号={}", wrkCharge.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else if (wrkCharge.getWrkSts() == 43L) { | 
|---|
|  |  |  | // 小车行驶通道 | 
|---|
|  |  |  | if (steProtocol.statusType.equals(SteStatusType.IDLE) && steProtocol.getPakMk().equals("N")) { | 
|---|
|  |  |  | // 命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | SteCommand steCommand = new SteCommand(); | 
|---|
|  |  |  | steCommand.setSteNo(wrkCharge.getSteNo()); // 穿梭车编号 | 
|---|
|  |  |  | steCommand.setTaskNo(wrkCharge.getWrkNo()); // 工作号 | 
|---|
|  |  |  | steCommand.setTaskMode(SteTaskModeType.BACK_ORIGIN);  // 去左端 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue()); | 
|---|
|  |  |  | steCommand.setBay(steProtocol.getBay()); | 
|---|
|  |  |  | steCommand.setLev(steProtocol.getLev()); | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Ste, wrkCharge.getSteNo(), new Task(2, steCommand))) { | 
|---|
|  |  |  | log.error("穿梭车命令下发失败,穿梭车号={},任务数据={}", wrkCharge.getSteNo(), JSON.toJSON(steCommand)); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 修改工作档状态 43.小车到达 ===> 44.小车走行 | 
|---|
|  |  |  | wrkCharge.setWrkSts(44L); | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | wrkCharge.setCrnEndTime(now); | 
|---|
|  |  |  | wrkCharge.setModiTime(now); | 
|---|
|  |  |  | if (!wrkChargeService.updateById(wrkCharge)) { | 
|---|
|  |  |  | log.error("修改复位任务状态 43.小车到达 ===> 44.小车走行 失败!!,工作号={}", wrkCharge.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else if (wrkCharge.getWrkSts() == 45L) { | 
|---|
|  |  |  | LocMast idleLoc = locMastService.selectById(basSte.getIdleLoc()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Integer otherSte = existOtherSte(idleLoc.getLocNo(), wrkCharge.getSteNo()); | 
|---|
|  |  |  | if (null != otherSte) { | 
|---|
|  |  |  | log.warn("{}号小车移入{}库位组失败,原因:存在{}号穿梭车!", wrkCharge.getSteNo(), idleLoc.getLocNo(), otherSte); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkCharge.getCrnNo()); | 
|---|
|  |  |  | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); | 
|---|
|  |  |  | if (crnProtocol == null) { continue; } | 
|---|
|  |  |  | // 只有当堆垛机空闲 并且 无任务时才继续执行 | 
|---|
|  |  |  | if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { | 
|---|
|  |  |  | // 堆垛机命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | CrnCommand crnCommand = new CrnCommand(); | 
|---|
|  |  |  | crnCommand.setCrnNo(wrkCharge.getCrnNo()); // 堆垛机编号 | 
|---|
|  |  |  | crnCommand.setTaskNo(wrkCharge.getWrkNo().shortValue()); // 工作号 | 
|---|
|  |  |  | crnCommand.setAckFinish((short) 0);  // 任务完成确认位 | 
|---|
|  |  |  | crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 任务模式:  库位移转 | 
|---|
|  |  |  | crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());     // 源库位排 | 
|---|
|  |  |  | crnCommand.setSourcePosY(steProtocol.getBay());     // 源库位列 | 
|---|
|  |  |  | crnCommand.setSourcePosZ(steProtocol.getLev());     // 源库位层 | 
|---|
|  |  |  | crnCommand.setDestinationPosX(Utils.getGroupRow(idleLoc.getLocNo(), true).shortValue());     // 目标库位排 | 
|---|
|  |  |  | crnCommand.setDestinationPosY(idleLoc.getBay1().shortValue());     // 目标库位列 | 
|---|
|  |  |  | crnCommand.setDestinationPosZ(idleLoc.getLev1().shortValue());     // 目标库位层 | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Crn, wrkCharge.getCrnNo(), new Task(2, crnCommand))) { | 
|---|
|  |  |  | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkCharge.getCrnNo(), JSON.toJSON(crnCommand)); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 修改穿梭车运行中排列层 | 
|---|
|  |  |  | steThread.modifyPos(Utils.getGroupRow(idleLoc.getLocNo(), true), idleLoc.getBay1(), idleLoc.getLev1()); | 
|---|
|  |  |  | // 修改工作档状态 45.小车待搬 => 46.放至待机位 | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | wrkCharge.setWrkSts(46L); | 
|---|
|  |  |  | wrkCharge.setCrnStrTime(now); | 
|---|
|  |  |  | wrkCharge.setModiTime(now); | 
|---|
|  |  |  | if (!wrkChargeService.updateById(wrkCharge)) { | 
|---|
|  |  |  | log.error("修改工作档状态 45.小车待搬 => 46.放至待机位 失败!!,工作号={}", wrkCharge.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|