| | |
| | | runRgv: |
| | | for (WrkMast wrkMast : wrkMasts) { |
| | | 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(); // 起始站位置 |
| | | position += 50; // 小车取货定位精度 +- 50,站点位置10000,小车在10050也是可以取的 |
| | |
| | | } |
| | | 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.getRgvPos()).append(",").append(rgvProtocol.getStatusType().desc).append("]"); |
| | | // } |
| | | // log.info(sb.toString()); |
| | | position -= 50; |
| | | 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.getRgvPos()).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 (rgvProtocol.modeType == RgvModeType.AUTO |
| | | && (rgvProtocol.getStatusType() == RgvStatusType.IDLE || rgvProtocol.getStatusType() == RgvStatusType.ROAM) |
| | | && rgvProtocol.getTaskNo1() == 0 |
| | |
| | | // 当前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目标站点之后 |
| | | // 获取RGV当前位置和状态 |
| | | long currentRgvPos = rgvProtocol.getRgvPos(); |
| | | int rgvStatus = rgvProtocol.getStatusType().id; |
| | | |
| | | // 定义浮动范围(仅停靠状态适用) |
| | | long posTolerance = (rgvStatus == 0 || rgvStatus == 2 || rgvStatus == 3 || rgvStatus == 6 || rgvStatus == 7 || rgvStatus == 8 || rgvStatus == 100) ? 50 : 0; |
| | | if(currentRgvPos < rgvDstaNoPosition + posTolerance) { // 小车当前位置 < rgv目标位置 |
| | | if(!(currentRgvPos - posTolerance < position && position < rgvDstaNoPosition + posTolerance)) { // 这个任务位置是在当前rgv位置前面并且这个任务起点在当前rgv目标站点之后 |
| | | break; // 当前rgv放货完成后,可以取当前任务 |
| | | } |
| | | } else { |
| | | if(!(rgvProtocol.getRgvPos() < position || position < rgvDstaNoPosition)) { |
| | | if(!(currentRgvPos + posTolerance < position || position < rgvDstaNoPosition - posTolerance)) { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | 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任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 工位1任务模式: 取放货 |
| | | rgvCommand.setSourceStaNo1(wrkMast.getRgvSstaNo().shortValue()); //工位1起点 |
| | | rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue()); //工位1目标站点 |
| | | rgvCommand.setCommand((short) 1); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvProtocol.getRgvNo(), new Task(2, rgvCommand))) { |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); |
| | | break runRgv; |
| | | } |
| | | log.info("RGV命令下发成功,RGV号={},任务数据={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); |
| | | Date now = new Date(); |
| | | wrkMast.setRgvNo(rgvProtocol.getRgvNo()); |
| | | wrkMast.setWrkSts(10L); |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | |
| | | break; |
| | | } |
| | | wrkMast.setWrkSts(2L); |
| | | if (wrkMast.getIoType()==120){ |
| | | wrkMast.setWrkSts(53L); |
| | | } |
| | | Date now = new Date(); |
| | | wrkMast.setRgvFinishTime(now); |
| | | wrkMastService.updateById(wrkMast); |