src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/cache/TaskProtocolCache.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/RgvThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/SiemensCrnThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -828,7 +828,7 @@ crnCommand.setDestinationPosX(Utils.getRowShort(taskWrk.getTargetPoint())); // 目标库位列 crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint())); // 目标库位层 crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint())); // 目标库位排 crnCommand.setCommand((short) 1); // crnCommand.setCommand((short) 1); if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand))) { log.error("堆垛机命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand)); throw new CoolException("堆垛机命令生成失败"); @@ -1056,7 +1056,7 @@ crnCommand.setDestinationPosX(Utils.getRowShort(taskWrk.getTargetPoint())); // 目标库位排 crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint())); // 目标库位列 crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint())); // 目标库位层 crnCommand.setCommand((short) 1); // crnCommand.setCommand((short) 1); if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand))) { log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand)); } else { @@ -1541,46 +1541,6 @@ Long[][] avoidedRange = new TrackRangeUtils().avoidRangeArr(rgvSlave, trackEntireLength, trackBenchmark, avoidDistance); List<Integer> belongToRange = RouteUtils.SortNearby(RouteUtils.belongToRange(rangeList, avoidedRange[0], basDevpPositions), rgvProtocol.RgvPos, basDevpPositions); for (Integer staNoNow : belongToRange) { for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { if (rgvStn.getStaNo().equals(staNoNow)) { TaskWrk taskWrk = deviceDetection(rgvStn); if (taskWrk != null) { BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { 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)) { TaskWrk taskWrk = deviceDetection(rgvStn); if (taskWrk != null) { Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) { if (rgvStnOut.getStaNo().equals(outStaNo)) { sign = taskGenerate(rgvSlave, rgvStn, 0); break; } } } break; } } if (sign) { break; } } } if (!sign && staList.size()==1){ if (rgvOtherIDLEOther(rgvSlave)){ if (!rgvOtherIDLE(rgvSlave,staList.get(0))){ @@ -1609,6 +1569,49 @@ } if (!sign) { for (Integer staNoNow : belongToRange) { for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { if (rgvStn.getStaNo().equals(staNoNow)) { TaskWrk taskWrk = deviceDetection(rgvStn); if (taskWrk != null) { BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { 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)) { TaskWrk taskWrk = deviceDetection(rgvStn); if (taskWrk != null) { Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) { if (rgvStnOut.getStaNo().equals(outStaNo)) { sign = taskGenerate(rgvSlave, rgvStn, 0); break; } } } break; } } if (sign) { break; } } } if (!sign) { for (Integer staNoNow : rangeList) { for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { if (rgvStn.getStaNo().equals(staNoNow)) { src/main/java/com/zy/core/cache/TaskProtocolCache.java
@@ -117,4 +117,25 @@ } } /** * 查询是否有可执行任务 */ public boolean isNowPosRun(Long targetPosition) { // lock.readLock().lock(); // 加读锁 try { List<TaskProtocol> allWalkTaskProtocol = new ArrayList<>(); for (TaskProtocol task : cache.values()) { long runPos = Math.abs(task.getTargetPosition() - targetPosition); if (runPos<50) { return true; } } return false; // 返回副本 } finally { // lock.readLock().unlock(); // 释放读锁 } } } src/main/java/com/zy/core/thread/RgvThread.java
@@ -471,6 +471,12 @@ > avoidDistance - 50) {//无需避让 return true; } else { RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getOtherId()); TaskProtocolCache taskProtocolCacheOther = rgvThreadOther.getTaskProtocolCache(); if (taskProtocolCacheOther.isNowPosRun(rgvProtocolOther.getRgvPos())){ return false; } long avoid = targetPosition + rgvProtocol.getCarBodyKunPeng() + avoidDistance + rgvProtocolOther.getCarBodyJiaoMing(); if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) { log.error("RGV行走超出范围!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); @@ -560,6 +566,11 @@ > avoidDistance - 50) {//无需避让 return true; } else { RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getOtherId()); TaskProtocolCache taskProtocolCacheOther = rgvThreadOther.getTaskProtocolCache(); if (taskProtocolCacheOther.isNowPosRun(rgvProtocolOther.getRgvPos())){ return false; } long avoid = targetPosition - rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng(); if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) { log.error("RGV行走超出范围!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -255,15 +255,56 @@ array[6] = command.getDestinationPosX(); array[7] = command.getDestinationPosY(); array[8] = command.getDestinationPosZ(); // array[9] = command.getSourceStaNo(); // array[10] = command.getDestinationStaNo(); array[9] = command.getCommand(); OperateResult result18 = siemensNet.Write("DB100.18", (short)0); try{ Thread.sleep(50L); } catch (Exception e){} OperateResult result = siemensNet.Write("DB100.0", array); int i=0; do{ //堆垛机任务写入后,回读一次,看是否成功 try{ Thread.sleep(100L); } catch (Exception e){} OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB101.0", (short) 4); if (resultRead.IsSuccess) { CrnCommand one = new CrnCommand(); one.setTaskNo(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2)); if (!command.getTaskNo().equals(one.getTaskNo()) ){ i++; log.error("堆垛机命令地址写入后回读失败[id:{}]>>>>重写[{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), i,JSON.toJSON(command),JSON.toJSON(one)); result = siemensNet.Write("DB100.0", array); }else{ break; } } }while(i<5); if (command.getAckFinish() == 0) { short commandFinish = 1; try{ Thread.sleep(100L); } catch (Exception e){} result = siemensNet.Write("DB100.18", commandFinish); int signFinish = 1; while (signFinish<5){ OperateResultExOne<byte[]> result10018 = siemensNet.Read("DB100.18", (short) 2); short transInt16 = siemensNet.getByteTransform().TransInt16(result10018.Content, 0); if (transInt16 != commandFinish){ log.info("下发DB100.18 回读失败" + "commandFinish:"+commandFinish); log.info("下发DB100.18 回读失败" + "array:"+ JSON.toJSONString(array)); result = siemensNet.Write("DB100.18", commandFinish); signFinish++; }else { log.info("下发DB100.18" + "commandFinish:"+commandFinish); log.info("下发DB100.18" + "array:"+ JSON.toJSONString(array)); break; } } } try {