zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
@@ -1155,11 +1155,12 @@ } // 穿梭车开始充电 motionList.addAll(kernelService.shuttleCharge( motionList.addAll(kernelService.shuttleAction( null, MotionDto.build((dto -> { dto.setShuttleNo(shuttleDevice.getId().intValue()); })) })), MotionCtgType.SHUTTLE_CHARGE_ON )); return motionList; @@ -1197,6 +1198,15 @@ // 判断穿梭车是否在目标层 if (Utils.getLev(shuttleLocNo) == Utils.getLev(locNo)) { // 穿梭车关闭充电 motionList.addAll(kernelService.shuttleAction( null, MotionDto.build((dto -> { dto.setShuttleNo(shuttleDevice.getId().intValue()); })), MotionCtgType.SHUTTLE_CHARGE_OFF )); // 穿梭车走行至目标库位 motionList.addAll(kernelService.shuttleMove( MotionDto.build((dto -> { zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
@@ -331,23 +331,15 @@ case SHUTTLE_PALLET_DOWN://托盘下降 break; case SHUTTLE_CHARGE_ON://充电开 break; case SHUTTLE_CHARGE_OFF://充电关 break; default: break; } })); return motionList; } public List<Motion> shuttleCharge(MotionDto origin, MotionDto target) { List<Motion> motionList = new ArrayList<>(); motionList.add(Motion.build(motion -> { motion.setDeviceCtg(DeviceCtgType.SHUTTLE.val()); motion.setDevice(String.valueOf(target.getShuttleNo())); motion.setMotionCtg(MotionCtgType.SHUTTLE_CHARGE_ON.val()); })); zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
@@ -178,6 +178,11 @@ return false; } Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, motion.getTaskNo())); if (task == null) { return false; } switch (Objects.requireNonNull(MotionCtgType.get(motion.getMotionCtgEl()))){ case LIFT_MOVE: // 判断提升机是否空闲 @@ -200,6 +205,17 @@ return false; } if (task.getTaskSts() < 100) {//入库判断托盘是否进入提升机 if (!liftProtocol.getHasTray()) { return false; } } else if (task.getTaskSts() >= 100 && task.getTaskSts() < 200) {//出库判断托盘是否离开提升机 if (liftProtocol.getHasTray()) { return false; } } break; case LIFT_WITH_SHUTTLE: // 判断提升机是否空闲 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/LocStsType.java
@@ -14,6 +14,7 @@ E,//不可放货通道 W,//母轨道 C,//充电桩 Z,//站点 ; LocStsType() { zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
@@ -15,10 +15,7 @@ import com.zy.asrs.wcs.core.entity.*; import com.zy.asrs.wcs.core.kernel.AnalyzeService; import com.zy.asrs.wcs.core.model.MapNode; import com.zy.asrs.wcs.core.model.enums.DeviceCtgType; import com.zy.asrs.wcs.core.model.enums.MotionStsType; import com.zy.asrs.wcs.core.model.enums.TaskCtgType; import com.zy.asrs.wcs.core.model.enums.TaskStsType; import com.zy.asrs.wcs.core.model.enums.*; import com.zy.asrs.wcs.core.service.*; import com.zy.asrs.wcs.core.utils.RedisUtil; import com.zy.asrs.wcs.core.utils.ShuttleDispatcher; @@ -574,14 +571,6 @@ * 四向穿梭车电量检测 ===>> 发起充电 */ public synchronized void loopShuttleCharge() { // 获取充电桩库位类型 LocCtg locCtg = locCtgService.getOne(new LambdaQueryWrapper<LocCtg>() .eq(LocCtg::getFlag, "CHARGE") .eq(LocCtg::getStatus, 1)); if (locCtg == null) { return; } //获取充电任务类型 TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>() .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.CHARGE)) @@ -618,7 +607,7 @@ //搜索小车当前楼层充电桩 ArrayList<Loc> allChargeLoc = new ArrayList<>(); List<Loc> list1 = locService.list(new LambdaQueryWrapper<Loc>() .eq(Loc::getLocCtg, locCtg.getId()) .eq(Loc::getLocSts, LocStsType.C.val()) .eq(Loc::getStatus, 1) .eq(Loc::getLev, lev)); if (!list1.isEmpty()) { @@ -627,7 +616,7 @@ //搜索其他楼层充电桩 List<Loc> list2 = locService.list(new LambdaQueryWrapper<Loc>() .eq(Loc::getLocCtg, locCtg.getId()) .eq(Loc::getLocSts, LocStsType.C.val()) .eq(Loc::getStatus, 1) .notIn(Loc::getLev, lev)); if (!list2.isEmpty()) { zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
@@ -302,20 +302,24 @@ } int lev = Utils.getLev(locNo);//当前楼层 JSONArray standbyLoc = JSON.parseArray(idleLoc); if (lev > standbyLoc.size()) { List<String> standbyLoc = JSON.parseArray(idleLoc, String.class); if (standbyLoc.isEmpty()) { throw new CoolException("避让数据异常"); } Object object = standbyLoc.get(lev - 1); List<String> locs = JSON.parseArray(object.toString(), String.class); if (locs.isEmpty()) { throw new CoolException("避让数据为空"); //获取当前层避让位置 List<String> currentLevStandByLoc = new ArrayList<>(); for (String loc : standbyLoc) { if (Utils.getLev(loc) == lev) { currentLevStandByLoc.add(loc); } } if (currentLevStandByLoc.isEmpty()) { throw new CoolException("当前层无避让位置"); } Integer finalDistance = ShuttleDispatcher.INF; String recentLoc = null; for (String loc : locs) { for (String loc : currentLevStandByLoc) { //当前穿梭车到避让位计算 List<NavigateNode> currentShuttlePath = NavigateUtils.calc( locNo zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java
@@ -556,7 +556,7 @@ if (shuttleService == null) { return false; } BasShuttle basShuttle = shuttleService.getById(this.device.getDeviceNo()); BasShuttle basShuttle = shuttleService.getOne(new LambdaQueryWrapper<BasShuttle>().eq(BasShuttle::getDeviceId, this.device.getId())); if (basShuttle == null) { return false; } zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
@@ -549,7 +549,7 @@ if (shuttleService == null) { return false; } BasShuttle basShuttle = shuttleService.getById(this.device.getDeviceNo()); BasShuttle basShuttle = shuttleService.getOne(new LambdaQueryWrapper<BasShuttle>().eq(BasShuttle::getDeviceId, this.device.getId())); if (basShuttle == null) { return false; }