|  |  |  | 
|---|
|  |  |  | redisCommand.setAssignCommand(assignCommand);//命令 | 
|---|
|  |  |  | //任务数据保存到redis | 
|---|
|  |  |  | if (redisUtil.set(DeviceRedisConstant.SHUTTLE_WORK_FLAG + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand, SerializerFeature.DisableCircularReferenceDetect))) { | 
|---|
|  |  |  | if (assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_IN.id | 
|---|
|  |  |  | || assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_OUT.id | 
|---|
|  |  |  | || assignCommand.getTaskMode() == ShuttleTaskModeType.MOVE_LOC_NO.id | 
|---|
|  |  |  | || assignCommand.getTaskMode() == ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO.id) { | 
|---|
|  |  |  | if (assignCommand.getTaskMode() == ShuttleTaskModeType.SHUTTLE_MOVE.id | 
|---|
|  |  |  | || assignCommand.getTaskMode() == ShuttleTaskModeType.TRANSPORT.id | 
|---|
|  |  |  | || assignCommand.getTaskMode() == ShuttleTaskModeType.MOVE_PALLET_LIFT.id | 
|---|
|  |  |  | || assignCommand.getTaskMode() == ShuttleTaskModeType.MOVE_PALLET_DOWN.id) { | 
|---|
|  |  |  | //下发行驶路径 | 
|---|
|  |  |  | CommandResponse response = shuttleThread.movePath(assignCommand.getNodes(), assignCommand.getDeviceTaskNo()); | 
|---|
|  |  |  | Boolean result = response.getResult(); | 
|---|
|  |  |  | 
|---|
|  |  |  | basShuttleOpt.setTaskNo(redisCommand.getTaskNo()); | 
|---|
|  |  |  | basShuttleOpt.setShuttleNo(Integer.parseInt(device.getDeviceNo())); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | basShuttleOpt.setMode(ShuttleCommandModeType.get(command.getMode()).desc); | 
|---|
|  |  |  | basShuttleOpt.setMode(ShuttleTaskModeType.get(assignCommand.getTaskMode()).desc); | 
|---|
|  |  |  | basShuttleOpt.setSourceLocNo(assignCommand.getSourceLocNo()); | 
|---|
|  |  |  | basShuttleOpt.setDistLocNo(assignCommand.getLocNo()); | 
|---|
|  |  |  | basShuttleOpt.setCommand(JSON.toJSONString(command)); | 
|---|
|  |  |  | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread); | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO; | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case SHUTTLE_TRANSPORT://穿梭车载货行走 | 
|---|
|  |  |  | // 如果已经在当前条码则过滤 | 
|---|
|  |  |  | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread); | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO; | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.TRANSPORT_TO_CONVEYOR; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case SHUTTLE_MOVE_LIFT_PALLET://穿梭车顶升并移动 | 
|---|
|  |  |  | shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread); | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.PAK_IN; | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.MOVE_PALLET_LIFT; | 
|---|
|  |  |  | shuttleCommands.add(0, shuttleThread.getLiftCommand(motion.getTaskNo(), true)); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case SHUTTLE_MOVE_DOWN_PALLET://穿梭车移动并托盘下降 | 
|---|
|  |  |  | shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread); | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.PAK_IN; | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.MOVE_PALLET_DOWN; | 
|---|
|  |  |  | shuttleCommands.add(shuttleCommands.size(), shuttleThread.getLiftCommand(motion.getTaskNo(), false)); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case SHUTTLE_MOVE_FROM_LIFT://出提升机 | 
|---|
|  |  |  | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | shuttleCommands = this.shuttleInOutLiftCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread); | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO; | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.MOVE_OUT_LIFT; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case SHUTTLE_MOVE_TO_LIFT://进提升机 | 
|---|
|  |  |  | // 判断提升机状态 | 
|---|
|  |  |  | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread); | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO; | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.MOVE_TO_LIFT; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case SHUTTLE_CHARGE_ON://充电开 | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.CHARGE; | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.CHARGE_ON; | 
|---|
|  |  |  | shuttleCommands.add(shuttleThread.getChargeCommand(motion.getTaskNo(), true)); | 
|---|
|  |  |  | assignCommand.setCharge(Boolean.TRUE); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case SHUTTLE_CHARGE_OFF://充电关 | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.CHARGE; | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.CHARGE_OFF; | 
|---|
|  |  |  | shuttleCommands.add(shuttleThread.getChargeCommand(motion.getTaskNo(), false)); | 
|---|
|  |  |  | assignCommand.setCharge(Boolean.TRUE); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | 
|---|
|  |  |  | shuttleCommands.add(shuttleThread.getUpdateLocationCommand(motion.getTaskNo(), motion.getTarget())); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case SHUTTLE_MOVE_STANDBY://穿梭车移动到待机位 | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO; | 
|---|
|  |  |  | shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //获取全部待机位 | 
|---|
|  |  |  | List<String> standbyLocs = JSON.parseArray(motion.getTemp(), String.class); | 
|---|
|  |  |  | 
|---|
|  |  |  | public enum ShuttleTaskModeType { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | INIT(0, "初始"),    // 初始 | 
|---|
|  |  |  | PAK_IN(1, "入库"), | 
|---|
|  |  |  | PAK_OUT(2, "出库"), | 
|---|
|  |  |  | MOVE_PALLET_LIFT(1, "移动并托盘顶升"), | 
|---|
|  |  |  | MOVE_PALLET_DOWN(2, "移动并托盘下降"), | 
|---|
|  |  |  | PALLET_LIFT(3, "托盘顶升"), | 
|---|
|  |  |  | PALLET_DOWN(4, "托盘下降"), | 
|---|
|  |  |  | X_NEGATIVE(5, "X-方向"), | 
|---|
|  |  |  | 
|---|
|  |  |  | SEARCH_RIGHT(11, "负方向(左)寻库位"), | 
|---|
|  |  |  | SEARCH_TOP(12, "负方向(前)寻库位"), | 
|---|
|  |  |  | SEARCH_BOTTOM(13, "负方向(后)寻库位"), | 
|---|
|  |  |  | MOVE_LOC_NO(14, "移动到目标库位"), | 
|---|
|  |  |  | CHARGE(15, "充电"), | 
|---|
|  |  |  | MOVE_LIFT(16, "移动到提升机"), | 
|---|
|  |  |  | AVOID(17, "避让任务"), | 
|---|
|  |  |  | TRANSPORT(18, "搬运任务"), | 
|---|
|  |  |  | SHUTTLE_MOVE_LOC_NO(19, "小车移库任务"), | 
|---|
|  |  |  | SHUTTLE_LOC_TO_LOC(20, "库位移转"), | 
|---|
|  |  |  | SHUTTLE_CONTROL(21, "小车管制"), | 
|---|
|  |  |  | SHUTTLE_CANCEL_CONTROL(22, "小车取消管制"), | 
|---|
|  |  |  | MOVE_LOC_NO_WRK_MAST(23, "移动到目标库位(生成移动任务)"), | 
|---|
|  |  |  | SHUTTLE_UPDATE_LOCATION(24, "小车坐标更新"), | 
|---|
|  |  |  | CHARGE_ON(14, "充电开"), | 
|---|
|  |  |  | CHARGE_OFF(15, "充电关"), | 
|---|
|  |  |  | MOVE_TO_LIFT(16, "小车进提升机"), | 
|---|
|  |  |  | MOVE_OUT_LIFT(17, "小车出提升机"), | 
|---|
|  |  |  | AVOID(18, "避让任务"), | 
|---|
|  |  |  | TRANSPORT(19, "小车载货移动"), | 
|---|
|  |  |  | TRANSPORT_TO_CONVEYOR(20, "小车载货进输送线"), | 
|---|
|  |  |  | SHUTTLE_MOVE(21, "小车移动"), | 
|---|
|  |  |  | SHUTTLE_CONTROL(22, "小车管制"), | 
|---|
|  |  |  | SHUTTLE_CANCEL_CONTROL(23, "小车取消管制"), | 
|---|
|  |  |  | MOVE_LOC_NO_WRK_MAST(24, "移动到目标库位(生成移动任务)"), | 
|---|
|  |  |  | SHUTTLE_UPDATE_LOCATION(25, "小车坐标更新"), | 
|---|
|  |  |  | ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public Integer id; | 
|---|