| | |
| | | && shuttleProtocol.getTaskNo() != 0 |
| | | && shuttleProtocol.getBusyStatus() == 0 |
| | | ) { |
| | | //标记复位 |
| | | shuttleProtocol.setPakMk(true); |
| | | |
| | | ShuttleAssignCommand assignCommand = shuttleProtocol.getAssignCommand(); |
| | | |
| | | //将任务档标记为完成 |
| | | WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo().intValue()); |
| | | ShuttleAssignCommand moveAssignCommand = null;//避让命令 |
| | | if (wrkMast != null) { |
| | | switch (wrkMast.getWrkSts().intValue()) { |
| | | case 9://9.小车入库搬运中 ==> 14.入库完成 |
| | | wrkMast.setWrkSts(14L); |
| | | case 5://5.小车搬运中 ==> 9.入库完成 |
| | | wrkMast.setWrkSts(9L); |
| | | //任务号清零 |
| | | shuttleProtocol.setTaskNo((short) 0); |
| | | break; |
| | | case 5://5.迁移小车至提升机口 ==> 6.迁移小车至提升机口完成 |
| | | wrkMast.setWrkSts(6L); |
| | | break; |
| | | case 22://22.迁移小车至提升机口 ==> 23.迁移小车至提升机口完成 |
| | | case 22://22.小车搬运中 ==> 23.小车搬运完成 |
| | | wrkMast.setWrkSts(23L); |
| | | break; |
| | | case 26://26.小车出库搬运中 ==> 27.小车出库搬运完成 |
| | | //任务执行完后,小车进入移开提升机口站点位置,以免坠落 |
| | | //搜索一条没有小车的空巷道,并调度小车 |
| | | int distLev = Utils.getLev(wrkMast.getSourceLocNo());//避让楼层 |
| | | String startLocNo = "180020" + distLev; |
| | | moveAssignCommand = Utils.searchEmptyGroupToMoveShuttle(distLev, shuttleThread.getSlave().getId(), shuttleThread, startLocNo); |
| | | if (moveAssignCommand == null) {//调度小车命令为空 |
| | | continue; |
| | | } |
| | | |
| | | wrkMast.setWrkSts(27L); |
| | | //任务号清零 |
| | | shuttleProtocol.setTaskNo((short) 0); |
| | | case 102://102.小车到提升机中 ==> 103.小车到提升机完成 |
| | | wrkMast.setWrkSts(103L); |
| | | break; |
| | | case 106://106.小车迁出提升机中 ==> 107.小车迁出提升机完成 |
| | | wrkMast.setWrkSts(107L); |
| | | break; |
| | | case 108://108.小车移动中 ==> 109.小车移动完成 |
| | | wrkMast.setWrkSts(109L); |
| | | break; |
| | | default: |
| | | } |
| | |
| | | //任务指令清零 |
| | | shuttleProtocol.setAssignCommand(null); |
| | | News.info("四向穿梭车已确认且任务完成状态,复位。四向穿梭车号={}", shuttleProtocol.getShuttleNo()); |
| | | |
| | | if (wrkMast.getWrkSts() == 27) { |
| | | if (moveAssignCommand != null) { |
| | | try { |
| | | Thread.sleep(4000); |
| | | //下发任务 |
| | | shuttleProtocol.setPakMk(true); |
| | | MessageQueue.offer(SlaveType.Shuttle, shuttleThread.getSlave().getId(), new Task(3, moveAssignCommand)); |
| | | } catch (InterruptedException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } else { |
| | | News.error("四向穿梭车已确认且任务完成状态,复位失败,但未找到工作档。四向穿梭车号={},工作号={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo()); |
| | | } |
| | | } |
| | | |
| | | if (assignCommand != null) { |
| | | if (assignCommand.getTaskMode().intValue() == ShuttleTaskModeType.AVOID.id) { |
| | | //避让任务 |
| | | //设置四向穿梭车为空闲状态 |
| | | shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); |
| | | //任务号清零 |
| | | shuttleProtocol.setTaskNo((short) 0); |
| | | //源库位清零 |
| | | shuttleProtocol.setSourceLocNo(null); |
| | | //目标库位清零 |
| | | shuttleProtocol.setLocNo(null); |
| | | //任务指令清零 |
| | | shuttleProtocol.setAssignCommand(null); |
| | | News.info("四向穿梭车避让任务已确认且任务完成状态,复位。四向穿梭车号={}", shuttleProtocol.getShuttleNo()); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | //四向穿梭车状态为充电状态 |
| | | if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.CHARGING_WAITING.id //充电标识 |
| | | && shuttleProtocol.getTaskNo() != 0) { |
| | | //查询是否有充电任务 |
| | | WrkCharge wrkCharge = wrkChargeMapper.selectByWorkNo(shuttleProtocol.getTaskNo().intValue()); |
| | | if (wrkCharge != null) { |
| | | switch (wrkCharge.getWrkSts().intValue()) { |
| | | case 52://四向穿梭车迁移到提升机口 |
| | | wrkCharge.setWrkSts(53L);//迁移完成 |
| | | shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING); |
| | | break; |
| | | case 56://小车去充电桩中 |
| | | wrkCharge.setWrkSts(57L);//到达充电桩 |
| | | break; |
| | | default: |
| | | } |
| | | |
| | | if (wrkChargeMapper.updateById(wrkCharge) > 0) { |
| | | if (wrkCharge.getWrkSts() == 60) { |
| | | //设置四向穿梭车为空闲状态 |
| | | shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); |
| | | } |
| | | if (wrkCharge.getWrkSts() != 57) { |
| | | //任务号清零 |
| | | shuttleProtocol.setTaskNo((short) 0); |
| | | //源库位清零 |
| | | shuttleProtocol.setSourceLocNo(null); |
| | | //目标库位清零 |
| | | shuttleProtocol.setLocNo(null); |
| | | //标记复位 |
| | | shuttleProtocol.setPakMk(true); |
| | | //任务指令清零 |
| | | shuttleProtocol.setAssignCommand(null); |
| | | } |
| | | News.info("四向穿梭车已确认且任务完成状态,复位。四向穿梭车号={}", shuttleProtocol.getShuttleNo()); |
| | | } else { |
| | | News.error("四向穿梭车已确认且任务完成状态,复位失败,但未找到工作档。四向穿梭车号={},工作号={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | && !liftProtocol.getBusy() |
| | | ) { |
| | | |
| | | DevpThread devpThread = null; |
| | | Integer devpId = null; |
| | | for (DevpSlave devp : slaveProperties.getDevp()){ |
| | | // 获取入库站信息 |
| | | devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | devpId = devp.getId(); |
| | | } |
| | | |
| | | //将任务档标记为完成 |
| | | WrkMast wrkMast = wrkMastMapper.selectByWorkNo372428(liftProtocol.getTaskNo().intValue()); |
| | | WrkMast wrkMast = wrkMastMapper.selectByWorkNo324104(liftProtocol.getTaskNo().intValue()); |
| | | if (wrkMast != null) { |
| | | //判断提升机是否到达任务楼层 |
| | | String locNo = wrkMast.getIoType() < 101 ? wrkMast.getLocNo() : wrkMast.getSourceLocNo(); |
| | | int lev = Utils.getLev(locNo);//任务目标楼层 |
| | | |
| | | //标记复位 |
| | | liftProtocol.setPakMk(true); |
| | | |
| | | switch (wrkMast.getWrkSts().intValue()) { |
| | | case 3://3.提升机搬运中 ==> 4.提升机搬运完成 |
| | | if (liftProtocol.getLev().intValue() != lev) { |
| | | continue;//提升机没有到达目标 |
| | | } |
| | | //给目标站设置工作号 |
| | | StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getStaNo());//目标站 |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devpId, new Task(2, staProtocol)); |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败"); |
| | | } |
| | | wrkMast.setWrkSts(4L); |
| | | //任务号清零 |
| | | liftProtocol.setTaskNo((short) 0); |
| | | wrkMast.setLiftNo(null);//提升机解锁 |
| | | break; |
| | | case 7://7.提升机迁移小车中 ==> 8.提升机迁移小车完成 |
| | | if (liftProtocol.getLev().intValue() != lev) { |
| | | continue;//提升机没有到达目标 |
| | | } |
| | | wrkMast.setWrkSts(8L); |
| | | break; |
| | | case 24://24.提升机迁移小车中 ==> 25.提升机迁移小车完成 |
| | | if (liftProtocol.getLev().intValue() != lev) { |
| | | continue;//提升机没有到达目标 |
| | | } |
| | | case 24://24.提升机搬运中 ==> 25.提升机搬运完成 |
| | | wrkMast.setWrkSts(25L); |
| | | break; |
| | | case 28://28.提升机搬运中 ==> 29.提升机搬运完成 |
| | | // if (liftProtocol.getPositionArrivalFeedback().intValue() != 2) { |
| | | // continue;//提升机是否达到输送线楼层 |
| | | // } |
| | | wrkMast.setWrkSts(29L); |
| | | wrkMast.setWrkSts(34L);//34.出库完成,暂时先直接完成出库工作档,后续需要根据输送线给出的状态来确定34.出库完成状态 |
| | | //任务号清零 |
| | | liftProtocol.setTaskNo((short) 0); |
| | | wrkMast.setLiftNo(null);//提升机解锁 |
| | | case 104://104.提升机搬运中 ==> 105.提升机搬运完成 |
| | | wrkMast.setWrkSts(105L); |
| | | break; |
| | | default: |
| | | } |
| | |
| | | } else { |
| | | News.error("提升机已确认且任务完成状态,复位失败,但未找到工作档。提升机号={},工作号={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo()); |
| | | } |
| | | } |
| | | |
| | | //查询是否有充电任务 |
| | | WrkCharge wrkCharge = wrkChargeMapper.selectByWorkNo(liftProtocol.getTaskNo().intValue()); |
| | | if (wrkCharge != null) { |
| | | //标记复位 |
| | | liftProtocol.setPakMk(true); |
| | | |
| | | switch (wrkCharge.getWrkSts().intValue()) { |
| | | case 54://提升机搬运中 |
| | | wrkCharge.setWrkSts(55L);//提升机搬运完成 |
| | | break; |
| | | default: |
| | | } |
| | | |
| | | if (wrkChargeMapper.updateById(wrkCharge) > 0) { |
| | | //设置提升机为空闲状态 |
| | | liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); |
| | | //任务号清零 |
| | | liftProtocol.setTaskNo((short) 0); |
| | | //标记复位 |
| | | liftProtocol.setPakMk(true); |
| | | //任务指令清零 |
| | | liftProtocol.setAssignCommand(null); |
| | | News.info("提升机已确认且任务完成状态,复位。提升机号={}", liftProtocol.getLiftNo()); |
| | | } else { |
| | | News.error("提升机已确认且任务完成状态,复位失败,但未找到工作档。提升机号={},工作号={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo()); |
| | | } |
| | | } |
| | | |
| | | //不是入出库调度任务、工作档任务,进行提升机的复位 |
| | | if (liftProtocol.getAssignCommand() != null) { |
| | | //设置提升机为空闲状态 |
| | | liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); |
| | | //判断是否为四向穿梭车调度提升机,如是则无需清理任务号 |
| | | // if (!liftProtocol.getSecurityMk()) { |
| | | // //任务号清零 |
| | | // liftProtocol.setTaskNo((short) 0); |
| | | // } |
| | | //标记复位 |
| | | liftProtocol.setPakMk(true); |
| | | //任务指令清零 |
| | | liftProtocol.setAssignCommand(null); |
| | | News.info("提升机已确认且任务完成状态,复位。提升机号={}", liftProtocol.getLiftNo()); |
| | | } |
| | | |
| | | } |
| | |
| | | if (basLift.getPoint() == null) { |
| | | return false;//没有设置提升机点位坐标 |
| | | } |
| | | //判断提升机是否有其他任务 |
| | | WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(basLift.getLiftNo()); |
| | | if (liftWrkMast != null) { |
| | | return false;//当前提升机存在未完成任务,等待下一次轮询 |
| | | } |
| | | NavigateNode liftNode = new NavigateNode(basLift.getPoint().getX(), basLift.getPoint().getY()); |
| | | liftNode.setZ(basLift.getPoint().getZ()); |
| | | |
| | |
| | | assignCommand.setNodes(result.getNodes()); |
| | | |
| | | wrkMast.setWrkSts(102L);//小车移动到提升机中 101.生成小车移库任务 ==> 102.小车到提升机中 |
| | | wrkMast.setLiftNo(basLift.getLiftNo());//提升机号 |
| | | wrkMast.setLiftNo(basLift.getLiftNo());//提升机号(锁定提升机防止被其他任务抢占) |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) > 0) { |
| | | //下发任务 |
| | |
| | | assignCommand.setNodes(result.getNodes()); |
| | | |
| | | wrkMast.setWrkSts(108L);//小车移动到目标库位中 107.小车迁出提升机完成 ==> 108.小车移动中 |
| | | wrkMast.setLiftNo(null);//释放提升机 |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) > 0) { |
| | | //下发任务 |