| | |
| | | |
| | | runRgv: |
| | | for (WrkMast wrkMast : wrkMasts) { |
| | | BasDevpPosition basDevpPositions = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", wrkMast.getRgvSstaNo())); // 站点 |
| | | Integer rgvSstaNo = wrkMast.getRgvSstaNo(); |
| | | // 1090,1089,1086,1083 按1083站点位置计算,能取1083,就能取1090,1089,1086,避免任务延迟下发方案一直给1083发 |
| | | if (rgvSstaNo == 1090 || rgvSstaNo == 1089 || rgvSstaNo == 1086 || rgvSstaNo == 1105) { |
| | | rgvSstaNo = 1083; |
| | | } |
| | | BasDevpPosition basDevpPositions = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", rgvSstaNo)); // 站点 |
| | | long position = basDevpPositions.getPlcPosition(); // 起始站位置 |
| | | TreeMap<Long, RgvProtocol> map = new TreeMap<>(); |
| | | for (RgvProtocol rgvProtocol : rgvProtocolList) { |
| | |
| | | } |
| | | map.put(distance, rgvProtocol); |
| | | } |
| | | log.info("取货站点:{},后面小车排序", basDevpPositions.getDevNo()); |
| | | StringBuilder sb = new StringBuilder(); |
| | | for (Map.Entry<Long, RgvProtocol> rgvProtocolMap : map.entrySet()) { |
| | | RgvProtocol rgvProtocol = rgvProtocolMap.getValue(); |
| | | sb.append("[").append(rgvProtocol.getRgvNo()).append(",").append(rgvProtocol.getStatusType().desc).append("]"); |
| | | } |
| | | log.info(sb.toString()); |
| | | // log.info("取货站点:{},后面小车排序", basDevpPositions.getDevNo()); |
| | | // StringBuilder sb = new StringBuilder(); |
| | | // for (Map.Entry<Long, RgvProtocol> rgvProtocolMap : map.entrySet()) { |
| | | // RgvProtocol rgvProtocol = rgvProtocolMap.getValue(); |
| | | // sb.append("[").append(rgvProtocol.getRgvNo()).append(",").append(rgvProtocol.getStatusType().desc).append("]"); |
| | | // } |
| | | // log.info(sb.toString()); |
| | | |
| | | for (Map.Entry<Long, RgvProtocol> rgvProtocolMap : map.entrySet()) { |
| | | RgvProtocol rgvProtocol = rgvProtocolMap.getValue(); // 最近距离小车 |
| | | // log.info("取货站点:{},后面最近小车:{},状态:{}", basDevpPositions.getDevNo(), rgvProtocol.getRgvNo(), rgvProtocol.getStatusType().desc); |
| | | int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("rgv_no", rgvProtocol.getRgvNo()).eq("wrk_sts", 10)); |
| | | if(wrkMast.getIoType() == 10 || wrkMast.getIoType() == 110 || wrkMast.getSourceStaNo() == 1034) { |
| | | if (count != 0) { |
| | | continue; |
| | | } |
| | | if (rgvProtocol.modeType == RgvModeType.AUTO |
| | | && (rgvProtocol.getStatusType() == RgvStatusType.IDLE || rgvProtocol.getStatusType() == RgvStatusType.ROAM) |
| | | && rgvProtocol.getTaskNo1() == 0 |
| | | && rgvProtocol.getAlarm() == 0) { |
| | | if (count != 0) { |
| | | log.error("{}呼叫小车:{}号小车空闲,但工作档显示该小车有任务",wrkMast.getWrkNo(),rgvProtocol.getRgvNo()); |
| | | break ; |
| | | } |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(rgvProtocol.getRgvNo()); |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | |
| | | wrkMast.setRgvCreateTime(now); |
| | | wrkMastService.updateById(wrkMast); |
| | | break runRgv; |
| | | } else if(rgvProtocol.modeType == RgvModeType.AUTO |
| | | && rgvProtocol.getTaskNo1() != 0){ // 当前小车放货目标位置在当前任务取货点之后,跳过任务分配,不再则判断下个小车目标位置 |
| | | WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", rgvProtocol.getTaskNo1())); // 当前rgv任务 |
| | | if(wrkMast1!= null && !Cools.isEmpty(wrkMast1.getRgvDstaNo())) { |
| | | // 当前rgv任务目标站点 |
| | | BasDevpPosition rgvDstaNoDevPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", wrkMast1.getRgvDstaNo())); |
| | | long rgvDstaNoPosition = rgvDstaNoDevPosition.getPlcPosition(); // 当前rgv任务目标站点位置 |
| | | if(rgvProtocol.getRgvPos() < rgvDstaNoPosition) { // 小车当前位置 < rgv目标位置 |
| | | if(!(rgvProtocol.getRgvPos() < position && position < rgvDstaNoPosition)) { // 这个任务位置是在当前rgv位置前面并且这个任务起点在当前rgv目标站点之后 |
| | | break; // 当前rgv放货完成后,可以取当前任务 |
| | | } |
| | | } else { |
| | | if(!(rgvProtocol.getRgvPos() < position || position < rgvDstaNoPosition)) { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | if (count != 0) { |
| | | break; |
| | | } |
| | | if (rgvProtocol.modeType == RgvModeType.AUTO |
| | | && (rgvProtocol.getStatusType() == RgvStatusType.IDLE || rgvProtocol.getStatusType() == RgvStatusType.ROAM) |
| | | && rgvProtocol.getTaskNo1() == 0 |
| | | && rgvProtocol.getAlarm() == 0) { |
| | | if (count != 0) { |
| | | log.error("{}呼叫小车:{}号小车空闲,但工作档显示该小车有任务",wrkMast.getWrkNo(),rgvProtocol.getRgvNo()); |
| | | break; |
| | | } |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(rgvProtocol.getRgvNo()); |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | |
| | | wrkMast.setRgvCreateTime(now); |
| | | wrkMastService.updateById(wrkMast); |
| | | break runRgv; |
| | | } else { |
| | | break ; // 只看最近的第一个小车 |
| | | } else if(rgvProtocol.modeType == RgvModeType.AUTO |
| | | && rgvProtocol.getTaskNo1() != 0){ // 当前小车放货目标位置在当前任务取货点之后,跳过任务分配,不再则判断下个小车目标位置 |
| | | WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", rgvProtocol.getTaskNo1())); // 当前rgv任务 |
| | | if(wrkMast1!= null && !Cools.isEmpty(wrkMast1.getRgvDstaNo())) { |
| | | // 当前rgv任务目标站点 |
| | | BasDevpPosition rgvDstaNoDevPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", wrkMast1.getRgvDstaNo())); |
| | | long rgvDstaNoPosition = rgvDstaNoDevPosition.getPlcPosition(); // 当前rgv任务目标站点位置 |
| | | if(rgvProtocol.getRgvPos() < rgvDstaNoPosition) { // 小车当前位置 < rgv目标位置 |
| | | if(!(rgvProtocol.getRgvPos() < position && position < rgvDstaNoPosition)) { // 这个任务位置是在当前rgv位置前面并且这个任务起点在当前rgv目标站点之后 |
| | | break; // 当前rgv放货完成后,可以取当前任务 |
| | | } |
| | | } else { |
| | | if(!(rgvProtocol.getRgvPos() < position || position < rgvDstaNoPosition)) { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | log.error("未查到小车执行任务!" + rgvProtocol.getTaskNo1()); |
| | | continue; |
| | | } else if(wrkMast.getWrkSts() != 10) { |
| | | log.error("执行任务状态不符合!" + rgvProtocol.getTaskNo1()); |
| | | log.warn("执行任务状态不符合!" + rgvProtocol.getTaskNo1()); |
| | | continue; |
| | | } |
| | | boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); |
| | |
| | | log.error("未查到小车执行任务!" + rgvProtocol.getTaskNo1()); |
| | | continue; |
| | | } else if(wrkMast.getWrkSts() != 10) { |
| | | log.error("执行任务状态不符合!" + rgvProtocol.getTaskNo1()); |
| | | log.warn("执行任务状态不符合!" + rgvProtocol.getTaskNo1()); |
| | | continue; |
| | | } |
| | | boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); |
| | |
| | | log.error("小车复位RGV命令下发失败,RGV号={}", rgvNo); |
| | | return false; |
| | | } else { |
| | | log.info("RGV命令下发成功,RGV号={}", rgvNo); |
| | | log.info("小车复位RGV命令下发成功,RGV号={}", rgvNo); |
| | | return true; |
| | | } |
| | | } catch (Exception e) { |