自动化立体仓库 - WCS系统
Junjie
2023-06-26 ea9caa1cc989e8b5166eafcf9174aae735dc19e8
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1375,6 +1375,7 @@
                            //设置四向穿梭车为空闲状态
                            shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
                        }
                        if (wrkCharge.getWrkSts() != 57) {
                        //任务号清零
                        shuttleProtocol.setTaskNo((short) 0);
                        //源库位清零
@@ -1385,6 +1386,7 @@
                        shuttleProtocol.setPakMk(true);
                        //任务指令清零
                        shuttleProtocol.setAssignCommand(null);
                        }
                        News.info("四向穿梭车已确认且任务完成状态,复位。四向穿梭车号={}", shuttleProtocol.getShuttleNo());
                    } else {
                        News.error("四向穿梭车已确认且任务完成状态,复位失败,但未找到工作档。四向穿梭车号={},工作号={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo());
@@ -2449,33 +2451,26 @@
        for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
            WrkCharge wrkCharge = wrkChargeService.selectWorking(null, WrkChargeType.charge);
            if (wrkCharge == null) {
                return;
                continue;
            }
            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkCharge.getShuttleNo());
            if (shuttleThread == null) {
                return;
                continue;
            }
            ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
            if (shuttleProtocol == null) {
                return;
                continue;
            }
            //当前穿梭车库位号
            String currentLocNo = shuttleProtocol.getCurrentLocNo();
            if (currentLocNo == null) {
                return;
            }
            //小车当前层高
            Integer currentLev = Utils.getLev(currentLocNo);
            //获取提升机
            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
            if (liftThread == null) {
                return;
                continue;
            }
            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
            if (liftProtocol == null) {
                return;
                continue;
            }
            //充电库位号
            String chargeLocNo = wrkCharge.getLocNo();
@@ -2483,6 +2478,14 @@
            Integer chargeLocNoLev = Utils.getLev(chargeLocNo);
            if (wrkCharge.getWrkSts() == 51) {
                //当前穿梭车库位号
                String currentLocNo = shuttleProtocol.getCurrentLocNo();
                if (currentLocNo == null) {
                    continue;
                }
                //小车当前层高
                Integer currentLev = Utils.getLev(currentLocNo);
                if (currentLev == chargeLocNoLev) {
                    //同一层无需经过提升机
                    //直接计算车到充电库位
@@ -2492,7 +2495,7 @@
                    //获取小车到充电库位路径指令
                    List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, chargeLocNo, NavigationMapType.NONE.id, assignCommand, shuttleThread);
                    if (commands == null) {
                        return;//未找到路径
                        continue;//未找到路径
                    }
                    //进行充电中
                    shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING);
@@ -2525,13 +2528,13 @@
                    //小车移动到提升机口站点,计算路径
                    List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftSiteLocNo, NavigationMapType.NONE.id, assignCommand, shuttleThread);
                    if (commands == null) {
                        return;//未找到路径
                        continue;//未找到路径
                    }
                    //获取当前小车所在楼层的站点信息
                    BasDevp basDevp = basDevpService.queryByLocNo(liftSiteLocNo);
                    if (basDevp == null) {
                        return;//找不到站点信息
                        continue;//找不到站点信息
                    }
                    Short basDevpQrCode = Short.parseShort(basDevp.getQrCodeValue());//站点二维码
@@ -2562,13 +2565,13 @@
                //判断提升机是否处于空闲状态
                if (!liftProtocol.isIdle()) {
                    return;
                    continue;
                }
                //判断小车是否在提升机内
                if (shuttleProtocol.getCurrentCode().intValue() != liftProtocol.getBarcode().intValue()) {
                    //小车不在提升机内
                    return;
                    continue;
                }
                //给提升机分配任务
@@ -2602,24 +2605,24 @@
                Short liftLev = liftProtocol.getLev();
                if (liftLev == null) {
                    return;
                    continue;
                }
                //判断提升机楼层是否到达目标楼层
                if (liftLev.intValue() != chargeLocNoLev) {
                    return;//没有到达目标楼层
                    continue;//没有到达目标楼层
                }
                //此时车在提升机内部,下达一步指令让车移动到提升机口
                Integer staNo = Utils.levToOutInStaNo(liftLev >= 2 ? liftLev + 1 : liftLev);//站点号
                BasDevp basDevp = basDevpService.selectById(staNo);
                if (basDevp == null) {
                    return;//站点不存在
                    continue;//站点不存在
                }
                //获取小车到充电库位路径指令
                List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, chargeLocNo, NavigationMapType.NONE.id, assignCommand, shuttleThread);
                //获取提升机口到充电库位路径指令
                List<ShuttleCommand> commands = this.shuttleAssignCommand(basDevp.getLocNo(), chargeLocNo, NavigationMapType.NONE.id, assignCommand, shuttleThread);
                if (commands == null) {
                    return;//未找到路径
                    continue;//未找到路径
                }
                short startCode = liftProtocol.getBarcode();//提升机内部二维码