自动化立体仓库 - WCS系统
*
lsh
4 天以前 7a7c50a1ecf82fe070cf4dd86b73ba7386b33da6
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1183,74 +1183,7 @@
        return false;
    }
    public boolean deviceRgvDetection(Integer startSta,RgvSlave rgvSlave,Integer endSta){
        BasDevpPosition basDevpPositionStartSta = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", startSta));
        if (basDevpPositionStartSta == null){
            return false;
        }
        BasDevpPosition basDevpPositionEndSta = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", endSta));
        if (basDevpPositionEndSta == null){
            return false;
        }
        DevpThread devpThreadEnd = (DevpThread) SlaveConnection.get(SlaveType.Devp, basDevpPositionEndSta.getPlcId());
        StaProtocol staProtocolEnd = devpThreadEnd.getStation().get(endSta);
        if (staProtocolEnd == null){
            return false;
        }
        // 判断是否满足放货条件
        if (!staProtocolEnd.isAutoing() || staProtocolEnd.isLoading()) {
            return false;
        }
        if (!rgvDetection(rgvSlave)){
            return false;
        }
        //  a当前  b  other
        //  b可用
            //  b无任务
                    //  半边区域内全任务
                    //  半边区域内取货任务
                    //  半边区域内放货任务
                //切换B
                    //  半边区域内全任务
                    //  半边区域内取货任务
                    //  半边区域内放货任务
            //b 有任务
                //  可用区域任务
                //  可用区域任务内取货任务
                    //
         // b禁用
            // 全区域任务  就近取货
        return false;
    }
    public synchronized void taskStart() {
        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
            try{
                if (rgvDetection(rgvSlave)){
                    for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()){
                        TaskWrk taskWrk = deviceDetection(inSta);
                        if (taskWrk!=null){
                            if (deviceRgvDetection(inSta.getStaNo(),rgvSlave,taskWrk.getTargetPointConvert())){
                                RgvProtocol rgvStatus = RgvStatusCache.getRgvStatus(rgvSlave.getId());
                            }
                        }
                    }
                }
            } catch (Exception e){
                log.error("任务生成失败===》异常信息:{}",e.getMessage());
            }
        }
    }
    public synchronized void DevpTaskNoRun() {
        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
            try{
                if (rgvDetection(rgvSlave)){
@@ -1272,69 +1205,124 @@
                        }
                    }
                    boolean sign = false;
                    if (rgvOtherStatusEnable(rgvSlave)){
                        //分成上下两部分任务
                        List<Integer>[] avoidRange = RouteUtils.avoidRange(staList, basDevpPositions);
                        List<Integer>[] avoidRange = RouteUtils.gradeRange(staList, basDevpPositions);
                        List<Integer> rangeListSou = avoidRange[itSmall ? 0 : 1];
                        List<Integer> rangeListSouOther = avoidRange[itSmall ? 1 : 0];
                        //就近排序
                        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
                        List<Integer> rangeList = RouteUtils.SortNearby(rangeListSou, rgvProtocol.RgvPos, basDevpPositions);
                        List<Integer> rangeListOther = RouteUtils.SortNearby(rangeListSouOther, rgvProtocol.RgvPos, basDevpPositions);
                        if (taskNoNow.equals("无")){ //b 无任务
                                //所属部分就进取货
                                //  半边区域内全任务
                            boolean sign = false;
                        //所属部分就进取货
                        //筛选范围内任务
                        //就近排序
                        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(rgvSlave.getOtherId());
                        //筛选在范围任务
                        List<Integer> belongToRange = RouteUtils.belongToRange(rangeList, rgvProtocolOther.getRgvPosDestination(), basDevpPositions);
                        for (Integer staNoNow : belongToRange){
                            for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
                                if (rgvStn.getStaNo().equals(staNoNow)){
                                    TaskWrk taskWrk = deviceDetection(rgvStn);
                                    if (taskWrk!=null){
                                        if (RouteUtils.CheckIfItIsWithinTheRange(rangeList,taskWrk.getTargetPointConvert(),basDevpPositions)){
                                            sign = taskGenerate(rgvSlave,rgvStn,0);
                                        }
                                    }
                                    break;
                                }
                            }
                            if (sign){
                                break;
                            }
                        }
                        if (!sign){
                            //  筛选范围内取货任务
                            for (Integer staNoNow : belongToRange){
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
                                    if (rgvStn.getStaNo().equals(staNoNow)){
                                        sign = taskGenerate(rgvSlave,rgvStn,0);
                                        break;
                                    }
                                }
                                if (sign){
                                    break;
                                }
                            }
                        }
                        if (!sign){
                            for (Integer staNoNow : rangeList){
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
                                    if (rgvStn.getStaNo().equals(staNoNow)){
                                        TaskWrk taskWrk = deviceDetection(rgvStn);
                                        if (taskWrk!=null){
                                            if (RouteUtils.CheckIfItIsWithinTheRange(rangeList,taskWrk.getTargetPointConvert(),basDevpPositions)){
                                                sign = taskGenerate(rgvSlave,rgvStn,0);
                                            }
                                        }
                                    }
                                }
                            }
                            if (!sign){
                                //  半边区域内取货任务
                                for (Integer staNoNow : rangeList){
                                    for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
                                        if (rgvStn.getStaNo().equals(staNoNow)){
                                            sign = taskGenerate(rgvSlave,rgvStn,0);
                                            break;
                                        }
                                    }
                                    if (sign){
                                        break;
                                    }
                                }
                                if (sign){
                                    break;
                                }
                            }
                            if (!sign){
                                //  半边区域内放货任务
                                for (Integer staNoNow : rangeListOther){
                                    for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
                                        if (rgvStn.getStaNo().equals(staNoNow)){
                                            break;
                                        }
                                    }
                                    if (sign){
                        }
                        if (!sign){
                            //  半边区域内取货任务
                            for (Integer staNoNow : rangeList){
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
                                    if (rgvStn.getStaNo().equals(staNoNow)){
                                        sign = taskGenerate(rgvSlave,rgvStn,0);
                                        break;
                                    }
                                }
                                if (sign){
                                    break;
                                }
                            }
                            //切换B
                            continue;
                        } else {//b 有任务
                                //  可用区域任务
                                //  可用区域任务内取货任务
                                //切换B
                            continue;
                        }
                        if (!sign){
                            //  半边区域内放货任务
                            for (Integer staNoNow : rangeListOther){
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
                                    if (rgvStn.getStaNo().equals(staNoNow)){
                                        TaskWrk taskWrk = deviceDetection(rgvStn);
                                        if (taskWrk!=null){
                                            if (RouteUtils.CheckIfItIsWithinTheRange(rangeList,taskWrk.getTargetPointConvert(),basDevpPositions)){
                                                sign = taskGenerate(rgvSlave,rgvStn,0);
                                            }
                                        }
                                        break;
                                    }
                                }
                                if (sign){
                                    break;
                                }
                            }
                        }
                    } else {
                        //可用区域就近取货
                        //就近排序
                        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
                        List<Integer> rangeList = RouteUtils.SortNearby(staList, rgvProtocol.RgvPos, basDevpPositions);
                        //  半边区域内取货任务
                        for (Integer staNoNow : rangeList){
                            for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
                                if (rgvStn.getStaNo().equals(staNoNow)){
                                    sign = taskGenerate(rgvSlave,rgvStn,0);
                                    break;
                                }
                            }
                            if (sign){
                                break;
                            }
                        }
                    }
                }
            } catch (Exception e){