| | |
| | | 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)){ |
| | |
| | | } |
| | | } |
| | | |
| | | 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){ |