| | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.common.SpringUtils; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.mapper.*; |
| | |
| | | // 库位移转 |
| | | // this.locToLoc(crn, crnProtocol); |
| | | // 演示 |
| | | this.steMoveDemo(crn, crnProtocol); |
| | | // this.steMoveDemo(crn, crnProtocol); |
| | | } |
| | | } |
| | | } |
| | |
| | | wrkMast.setIoPri((double) 9998); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | |
| | | // 双深库位且浅库位有货,则需先对浅库位进行库位移转 |
| | | if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) { |
| | | String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo()); |
| | | LocMast shallowLoc = locMastService.selectById(shallowLocNo); |
| | | // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬! |
| | | if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) { |
| | | WrkMast waitWrkMast = wrkMastMapper.selectBySourceLocNo(shallowLocNo); |
| | | if (null == waitWrkMast) { |
| | | News.error("{}库位异常,未检索到相应工作档!", shallowLocNo); |
| | | } else { |
| | | if(waitWrkMast.getWrkSts() == 11) { |
| | | waitWrkMast.setIoPri(wrkMast.getIoPri() + 1); |
| | | waitWrkMast.setModiTime(new Date()); |
| | | if (wrkMastMapper.updateById(waitWrkMast) == 0) { |
| | | News.error("调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | continue; |
| | | } |
| | | } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { |
| | | // 此标记避免多次执行移库任务 |
| | | if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) { |
| | | wrkMast.setUpdMk("Y"); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | // 生成工作档、改变浅库位的源库/目标库 库位状态、下发堆垛机命令(立马执行) |
| | | moveLocForDeepLoc(slave, shallowLoc); |
| | | } |
| | | News.error("{}任务出库失败,浅库位堵塞!", wrkMast.getWrkNo()); |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | // 已经存在吊车执行任务时,则过滤 |
| | | if (wrkMastMapper.selectWorking(slave.getId()) != null) { |
| | | continue; |
| | | } |
| | | |
| | | // 1.堆垛机开始移动 |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 |
| | | crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式: 库位移转 |
| | | crnCommand.setSourcePosX(sourceSta.getRow1().shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosY(sourceSta.getBay1().shortValue()); // 源库位列 |
| | | crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue()); // 源库位层 |
| | | crnCommand.setDestinationPosX(crnStn.getRow().shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosY(crnStn.getBay().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(crnStn.getLev().shortValue()); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { |
| | | News.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | } else { |
| | | // 修改工作档状态 11.生成出库ID => 16.吊车出库中 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(16L); |
| | | wrkMast.setCrnStrTime(now); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | News.error("修改工作档状态 11.生成出库ID => 16.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } else { |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | } else { |
| | | |
| | | // 最外层库位,直接堆垛机出库 |
| | | if (locMastService.isOutMost(wrkMast.getSourceLocNo(), false)) { |
| | | // 已经存在吊车执行任务时,则过滤 |
| | |
| | | return true; |
| | | } |
| | | } |
| | | // 不是最外层库位,需要使用穿梭车搬运后,再堆垛机出库 |
| | | // 不是最外层库位,需要使用穿梭车搬运后,再堆垛机出库 |
| | | } else { |
| | | // 当前组库位是否有穿梭车 |
| | | Integer steNo = this.hasCarOfIdle(wrkMast.getSourceLocNo()); |
| | |
| | | } |
| | | } |
| | | |
| | | // 没有小车 |
| | | // 没有小车 |
| | | } else { |
| | | if (wrkMast.getWrkSts() == 11L && wrkMast.getSteNo() == null) { |
| | | // 寻找最近的小车 |
| | |
| | | SteProtocol steProtocol = steThread.getSteProtocol(); |
| | | if (steProtocol == null) { continue; } |
| | | if (!steProtocol.isIdle()) { continue; } |
| | | if (steProtocol.getRow() == 1) { 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)) |
| | |
| | | } |
| | | } |
| | | // 移库 ===>> 堆垛机搬至目标库位组 完成 |
| | | } else if (wrkMast.getWrkSts() == 16) { |
| | | // 16.吊车出库中 ==> 17.出库完成 |
| | | wrkMast.setWrkSts(17L); |
| | | 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) { |
| | | // 堆垛机复位 |
| | | crnThread.setResetFlag(true); |
| | | } else { |
| | | News.error("修改工作档状态 16.吊车出库中 ==> 17.出库完成 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | } else { |
| | | steThread.setResetFlag(true); |
| | | } |
| | | } else if (wrkCharge.getWrkSts() == 29) { |
| | | // 29.开始充电 ===>> 30.完成充电 |
| | | wrkCharge.setWrkSts(30L); |
| | | if (!wrkChargeService.updateById(wrkCharge)) { |
| | | News.error("修改充电任务状态 29.开始充电 ===>> 30.完成充电 失败!!,工作号={}", wrkCharge.getWrkNo()); |
| | | } else { |
| | | steThread.setResetFlag(true); |
| | | } |
| | | } else if (wrkCharge.getWrkSts() == 32) { |
| | | } |
| | | // else if (wrkCharge.getWrkSts() == 29) { |
| | | // // 29.开始充电 ===>> 30.完成充电 |
| | | // wrkCharge.setWrkSts(30L); |
| | | // if (!wrkChargeService.updateById(wrkCharge)) { |
| | | // News.error("修改充电任务状态 29.开始充电 ===>> 30.完成充电 失败!!,工作号={}", wrkCharge.getWrkNo()); |
| | | // } else { |
| | | // steThread.setResetFlag(true); |
| | | // } |
| | | // } |
| | | else if (wrkCharge.getWrkSts() == 32) { |
| | | // 32.小车走行 ===>> 33.小车待搬 |
| | | wrkCharge.setWrkSts(33L); |
| | | if (!wrkChargeService.updateById(wrkCharge)) { |
| | |
| | | SteChargeType steCharge = null; |
| | | do { |
| | | String locNo; |
| | | if (!devpThread.charge0) { |
| | | if (devpThread.charge0) { |
| | | SteChargeType first = SteChargeType.FIRST; |
| | | locNo = first.locNo; |
| | | if (basSteService.hasCarOfLocNo(locNo) == null |
| | |
| | | break; |
| | | } |
| | | } |
| | | if (!devpThread.charge1) { |
| | | SteChargeType second = SteChargeType.SECOND; |
| | | locNo = second.locNo; |
| | | if (basSteService.hasCarOfLocNo(locNo) == null |
| | | && wrkChargeService.selectWorkingOfCharge(second.ssbm) == null) { |
| | | steCharge = second; |
| | | break; |
| | | } |
| | | } |
| | | if (!devpThread.charge2) { |
| | | SteChargeType third = SteChargeType.THIRD; |
| | | locNo = third.locNo; |
| | | if (basSteService.hasCarOfLocNo(locNo) == null |
| | | && wrkChargeService.selectWorkingOfCharge(third.ssbm) == null) { |
| | | steCharge = third; |
| | | break; |
| | | } |
| | | } |
| | | // if (!devpThread.charge1) { |
| | | // SteChargeType second = SteChargeType.SECOND; |
| | | // locNo = second.locNo; |
| | | // if (basSteService.hasCarOfLocNo(locNo) == null |
| | | // && wrkChargeService.selectWorkingOfCharge(second.ssbm) == null) { |
| | | // steCharge = second; |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (!devpThread.charge2) { |
| | | // SteChargeType third = SteChargeType.THIRD; |
| | | // locNo = third.locNo; |
| | | // if (basSteService.hasCarOfLocNo(locNo) == null |
| | | // && wrkChargeService.selectWorkingOfCharge(third.ssbm) == null) { |
| | | // steCharge = third; |
| | | // break; |
| | | // } |
| | | // } |
| | | break; |
| | | } while (false); |
| | | |
| | |
| | | wrkCharge.setCharge(steCharge.ssbm); |
| | | wrkCharge.setWrkNo(commonService.getChargeWorkNo(4)); |
| | | wrkCharge.setWrkSts(21L); // 21.准备充电 |
| | | wrkCharge.setCrnNo(2); // 固定2号堆垛机 |
| | | wrkCharge.setCrnNo(1); // 固定1号堆垛机 |
| | | wrkCharge.setIoPri((double) 10); |
| | | wrkCharge.setLocNo(chargeLocNo); |
| | | wrkCharge.setMemo("charge"); |
| | |
| | | continue; |
| | | } |
| | | |
| | | // 小车处于通道 |
| | | List<String> channel = slaveProperties.getChannel(); |
| | | for (String channelLocNo : channel) { |
| | | if (steProtocol.getRow().intValue() == Utils.getRow(channelLocNo) |
| | | && steProtocol.getBay().intValue() == Utils.getBay(channelLocNo) |
| | | && steProtocol.getLev().intValue() == Utils.getLev(channelLocNo)) { |
| | | Integer otherSte = existOtherSte(channelLocNo, wrkCharge.getSteNo()); |
| | | if (null != otherSte) { |
| | | News.warn("{}号小车充电阻断,原因:通道存在{}号穿梭车!", wrkCharge.getSteNo(), otherSte); |
| | | } else { |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | SteCommand steCommand = new SteCommand(); |
| | | steCommand.setSteNo(wrkCharge.getSteNo()); // 穿梭车编号 |
| | | steCommand.setTaskNo(wrkCharge.getWrkNo()); // 工作号 |
| | | steCommand.setTaskMode(SteTaskModeType.GO_ORIGIN); // 去右端 |
| | | |
| | | steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), false).shortValue()); |
| | | steCommand.setBay(steProtocol.getBay()); |
| | | steCommand.setLev(steProtocol.getLev()); |
| | | if (!MessageQueue.offer(SlaveType.Ste, wrkCharge.getSteNo(), new Task(2, steCommand))) { |
| | | News.error("穿梭车命令下发失败,穿梭车号={},任务数据={}", wrkCharge.getSteNo(), JSON.toJSON(steCommand)); |
| | | } else { |
| | | // 修改工作档状态 21.准备充电 ===> 25.小车走行 |
| | | wrkCharge.setWrkSts(25L); |
| | | Date now = new Date(); |
| | | wrkCharge.setModiTime(now); |
| | | if (!wrkChargeService.updateById(wrkCharge)) { |
| | | News.error("修改充电任务状态 21.准备充电 ===> 25.小车走行 失败!!,工作号={}", wrkCharge.getWrkNo()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 处于充电库位组 |
| | | if (steProtocol.getRow().intValue() == Utils.getRow(chargeLocNo) |
| | | && steProtocol.getBay().intValue() == Utils.getBay(chargeLocNo) |
| | | && steProtocol.getLev().intValue() == Utils.getLev(chargeLocNo)) { |
| | | // 修改工作档状态 21.准备充电 => 28.充电就绪 |
| | | wrkCharge.setWrkSts(28L); |
| | | // 修改工作档状态 21.准备充电 => 24.小车到达 |
| | | wrkCharge.setWrkSts(24L); |
| | | wrkCharge.setModiTime(new Date()); |
| | | if (!wrkChargeService.updateById(wrkCharge)) { |
| | | News.error("修改充电任务状态 21.准备充电 => 28.充电就绪 失败!!,工作号={}", wrkCharge.getWrkNo()); |
| | | News.error("修改充电任务状态 21.准备充电 => 24.小车到达 失败!!,工作号={}", wrkCharge.getWrkNo()); |
| | | } |
| | | } else { |
| | | this.letCarBeWaiting(wrkCharge, ste.getId()); |
| | |
| | | return; |
| | | } |
| | | if (steProtocol.getCharge() > Float.parseFloat(basSte.getChargeLine())) { |
| | | MessageQueue.offer(SlaveType.Devp, 1, new Task(3, 999));//充电标记 |
| | | wrkCharge.setWrkSts(30L); |
| | | wrkChargeMapper.updateById(wrkCharge); |
| | | return; |
| | |
| | | return; |
| | | } |
| | | |
| | | LocMast locMast = locMastService.selectById(basSte.getIdleLoc()); |
| | | |
| | | // 搬小车至小车走向通道 |
| | | List<String> channel = slaveProperties.getChannel(); |
| | | for (String channelLocNo : channel) { |
| | | Integer otherSte = existOtherSte(channelLocNo, wrkCharge.getSteNo()); |
| | | if (null != otherSte) { |
| | | News.warn("{}号小车移入{}库位组失败,原因:存在{}号穿梭车!", wrkCharge.getSteNo(), channelLocNo, otherSte); |
| | | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkCharge.getCrnNo()); |
| | | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); |
| | | if (crnProtocol == null) { return; } |
| | | // 只有当堆垛机空闲 并且 无任务时才继续执行 |
| | | 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(locMast.getLocNo(), true).shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkCharge.getCrnNo(), new Task(2, crnCommand))) { |
| | | News.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkCharge.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | } else { |
| | | LocMast channelLoc = locMastService.selectById(channelLocNo); |
| | | |
| | | 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(channelLoc.getLocNo(), true).shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosY(channelLoc.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(channelLoc.getLev1().shortValue()); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkCharge.getCrnNo(), new Task(2, crnCommand))) { |
| | | News.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkCharge.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | } else { |
| | | // 修改穿梭车运行中排列层 |
| | | steThread.modifyPos(Utils.getGroupRow(channelLoc.getLocNo(), true), channelLoc.getBay1(), channelLoc.getLev1()); |
| | | // 修改工作档状态 22.小车待搬 => 23.吊车搬运 |
| | | Date now = new Date(); |
| | | wrkCharge.setWrkSts(23L); |
| | | wrkCharge.setCrnStrTime(now); |
| | | wrkCharge.setModiTime(now); |
| | | if (!wrkChargeService.updateById(wrkCharge)) { |
| | | News.error("修改工作档状态 22.小车待搬 => 23.吊车搬运 失败!!,工作号={}", wrkCharge.getWrkNo()); |
| | | } |
| | | } |
| | | break; |
| | | // 修改穿梭车运行中排列层 |
| | | steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo(), true), locMast.getBay1(), locMast.getLev1()); |
| | | // 修改工作档状态 22.小车待搬 => 23.吊车搬运 |
| | | Date now = new Date(); |
| | | wrkCharge.setWrkSts(23L); |
| | | wrkCharge.setCrnStrTime(now); |
| | | wrkCharge.setModiTime(now); |
| | | if (!wrkChargeService.updateById(wrkCharge)) { |
| | | News.error("修改工作档状态 22.小车待搬 => 23.吊车搬运 失败!!,工作号={}", wrkCharge.getWrkNo()); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | SteCommand steCommand = new SteCommand(); |
| | | steCommand.setSteNo(wrkCharge.getSteNo()); // 穿梭车编号 |
| | | steCommand.setTaskNo(wrkCharge.getWrkNo()); // 工作号 |
| | | steCommand.setTaskMode(SteTaskModeType.GO_ORIGIN); // 去右端 |
| | | steCommand.setTaskMode(SteTaskModeType.BACK_ORIGIN); // 去右端 |
| | | |
| | | steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), false).shortValue()); |
| | | steCommand.setBay(steProtocol.getBay()); |
| | |
| | | } |
| | | } |
| | | } else if (wrkCharge.getWrkSts() == 26) { |
| | | // 固定堆垛机 |
| | | int crnNo = 1; |
| | | // 入出库任务优先 |
| | | if (null != wrkMastMapper.selectWorkingByCrn(crnNo)) { |
| | | return; |
| | | } |
| | | |
| | | // 充电位 |
| | | LocMast chargeLoc = locMastService.selectById(wrkCharge.getLocNo()); |
| | | |
| | | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnNo); |
| | | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); |
| | | if (crnProtocol == null) { return; } |
| | | // 只有当堆垛机空闲 并且 无任务时才继续执行 |
| | | if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { |
| | | // 堆垛机命令下发区 -------------------------------------------------------------------------- |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(crnNo); // 堆垛机编号 |
| | | crnCommand.setTaskNo(wrkCharge.getWrkNo().shortValue()); // 工作号 |
| | | crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 任务模式: 库位移转 |
| | | crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), false).shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosY(steProtocol.getBay()); // 源库位列 |
| | | crnCommand.setSourcePosZ(steProtocol.getLev()); // 源库位层 |
| | | crnCommand.setDestinationPosX(chargeLoc.getRow1().shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosY(chargeLoc.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(chargeLoc.getLev1().shortValue()); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, crnCommand))) { |
| | | News.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", crnNo, JSON.toJSON(crnCommand)); |
| | | } else { |
| | | // 修改穿梭车运行中排列层 |
| | | steThread.modifyPos(chargeLoc.getRow1(), chargeLoc.getBay1(), chargeLoc.getLev1()); |
| | | // 修改工作档状态 26.等待充电 => 27.放至充电位 |
| | | Date now = new Date(); |
| | | wrkCharge.setWrkSts(27L); |
| | | wrkCharge.setCrnStrTime(now); |
| | | wrkCharge.setModiTime(now); |
| | | if (!wrkChargeService.updateById(wrkCharge)) { |
| | | News.error("修改工作档状态 26.等待充电 => 27.放至充电位 失败!!,工作号={}", wrkCharge.getWrkNo()); |
| | | } |
| | | } |
| | | } |
| | | } else if (wrkCharge.getWrkSts() == 28L) { |
| | | // 穿梭车下发充电任务 |
| | | SteCommand steCommand = new SteCommand(); |
| | | steCommand.setSteNo(wrkCharge.getSteNo()); // 穿梭车编号 |
| | |
| | | News.error("修改充电任务状态 28.充电就绪 ===>> 29.开始充电 失败!!,工作号={}", wrkCharge.getWrkNo()); |
| | | } |
| | | } |
| | | } else if (wrkCharge.getWrkSts() == 29) { |
| | | Float idle2 = steProtocol.isIdle2(); |
| | | String chargeLine = SpringUtils.getBean(BasSteService.class).selectById(1).getChargeLine(); |
| | | if (idle2<(Float.parseFloat(chargeLine)+2)){ |
| | | MessageQueue.offer(SlaveType.Devp, 1, new Task(3, 666));//充电标记 |
| | | }else if (idle2 > 70f){ |
| | | MessageQueue.offer(SlaveType.Devp, 1, new Task(3, 999));//充电标记 |
| | | // 29.开始充电 ===>> 30.完成充电 |
| | | wrkCharge.setWrkSts(30L); |
| | | if (!wrkChargeService.updateById(wrkCharge)) { |
| | | News.error("修改充电任务状态 29.开始充电 ===>> 30.完成充电 失败!!,工作号={}", wrkCharge.getWrkNo()); |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | News.error("executeSteCharge fail", e); |
| | |
| | | /** |
| | | * 轮询充电桩是否有空闲小车 |
| | | */ |
| | | @Deprecated |
| | | public synchronized void queryChargeLocOfComplete() { |
| | | // 与充电任务不同步进行 |
| | | if (null != wrkChargeService.selectWorking(null, WrkChargeType.charge)) { return; } |
| | |
| | | /** |
| | | * 小车从充电桩 至 待机库位 |
| | | */ |
| | | @Deprecated |
| | | public synchronized void steFromChargeToIdleLoc() { |
| | | WrkCharge wrkCharge = wrkChargeService.selectWorking(null, WrkChargeType.reset); |
| | | if (wrkCharge == null) { return; } |
| | |
| | | } |
| | | |
| | | } |
| | | /** |
| | | * 出入库模式切换 |
| | | */ |
| | | public synchronized void outAndIn() { |
| | | try { |
| | | // 根据输送线plc遍历 |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | for (DevpSlave.Sta inSta : devp.getInSta()) { |
| | | Thread.sleep(500); |
| | | boolean a=true,b=true; |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectAll(inSta.getStaNo()); |
| | | if (Cools.isEmpty(wrkMasts)){ |
| | | b=false; |
| | | }else { |
| | | for (WrkMast wrkMast:wrkMasts){ |
| | | if (wrkMast.getSourceStaNo()!=wrkMast.getStaNo()){ |
| | | a=false; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | switch (inSta.getStaNo()) { |
| | | case 102://1F |
| | | if (a && b){ |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 11)); |
| | | }else if (b){ |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 12)); |
| | | }else { |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 10)); |
| | | } |
| | | break; |
| | | case 202://2F |
| | | if (a && b){ |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 21)); |
| | | }else if (b){ |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 22)); |
| | | }else { |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 20)); |
| | | } |
| | | break; |
| | | case 302://3F |
| | | if (a && b){ |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 31)); |
| | | }else if (b){ |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 32)); |
| | | }else { |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 30)); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |