自动化立体仓库 - WCS系统
*
lsh
4 天以前 7a7c50a1ecf82fe070cf4dd86b73ba7386b33da6
*
3个文件已修改
225 ■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 196 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/RouteUtils.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/RgvProtocol.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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){
src/main/java/com/zy/asrs/utils/RouteUtils.java
@@ -16,7 +16,7 @@
 */
public class RouteUtils {
    //排序  执行方向(面朝轨道 定位值左小右大)  0:左 小   1:右 大
    public static List<Integer>[] avoidRange(List<Integer> staNoList,List<BasDevpPosition> basDevpPositions) {
    public static List<Integer>[] gradeRange(List<Integer> staNoList,List<BasDevpPosition> basDevpPositions) {
        List<Integer>[] avoidRangeArray = new ArrayList[2];
@@ -25,6 +25,16 @@
        return avoidRangeArray;
    }
    //获取在范围的站点
    public static List<Integer> belongToRange(List<Integer> staNoList,Long position,List<BasDevpPosition> basDevpPositions){
        List<Integer> siteList = new ArrayList<>();
        return siteList;
    }
    //提取站点集合
@@ -44,4 +54,17 @@
        return siteList;
    }
    //检测是否在范围
    public static boolean CheckIfItIsWithinTheRange(List<Integer> staNoList,Integer staNo,List<BasDevpPosition> basDevpPositions){
        List<Integer> siteList = new ArrayList<>();
        if (staNoList.isEmpty()){
            return true;
        }
        return false;
    }
}
src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -49,6 +49,10 @@
     * RGV当前位置
     */
    public Long RgvPos = 0L;
    /**
     * RGV目的位置
     */
    public Long RgvPosDestination = 0L;
    /**