| 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))){ @@ -1608,6 +1568,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()) { src/main/java/com/zy/core/cache/TaskProtocolCache.java
@@ -117,4 +117,42 @@ } } /** * 查询是否有可执行任务 */ 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(); // 释放读锁 } } /** * 查询是否有可执行任务 */ public TaskProtocol getNowPosRunTask(Long targetPosition) { // lock.readLock().lock(); // 加读锁 try { for (TaskProtocol task : cache.values()) { long runPos = Math.abs(task.getTargetPosition() - targetPosition); if (runPos<50) { return task; } } return null; // 返回副本 } finally { // lock.readLock().unlock(); // 释放读锁 } } } src/main/java/com/zy/core/thread/RgvThread.java
@@ -292,7 +292,7 @@ while (true) { try { // 休眠 1 秒 Thread.sleep(100); Thread.sleep(50); if (!deviceDetection()) { continue; } @@ -319,7 +319,8 @@ write(issued); rgvTaskProtocol.setAvoid(0); Thread.sleep(200); try{Thread.sleep(50L);} catch (Exception e){} RgvTaskCache.updateRgvStatus(rgvTaskProtocol); } continue; @@ -352,22 +353,6 @@ } else { for (TaskProtocol taskProtocol : allTakeTaskProtocol) { if (taskProtocol.getIsRunning() == 1) {//准备下发 // RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); if (taskProtocol.getTaskStatus()==3){ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, taskProtocol.getTargetPositionStaNoPlcId()); StaProtocol staProtocol = devpThread.getStation().get(taskProtocol.getTargetPositionStaNo()); if (staProtocol == null ) { continue; } // 判断是否满足入库条件 if (!staProtocol.isAutoing() || staProtocol.isLoading() || staProtocol.getWorkNo() != 0 ){ Thread.sleep(500); // System.out.println("<放货目标站>" + taskProtocol.getTargetPositionStaNo() + "<非自动或者有物或者存在工作号!!!>"); // continue; } } //双车 if (rgvOtherStatusEnable()) { //另一台车是否允许此台车执行 @@ -387,8 +372,6 @@ if (!staProtocol.isAutoing() || staProtocol.isLoading() || staProtocol.getWorkNo() != 0 ){ Thread.sleep(500); // System.out.println("<放货目标站>" + taskProtocol.getTargetPositionStaNo() + "<非自动或者有物或者存在工作号!!!>"); continue; } } @@ -471,6 +454,31 @@ > avoidDistance - 50) {//无需避让 return true; } else { RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getOtherId()); TaskProtocolCache taskProtocolCacheOther = rgvThreadOther.getTaskProtocolCache(); TaskProtocol nowPosRunTask = taskProtocolCacheOther.getNowPosRunTask(rgvProtocolOther.getRgvPos()); if (!Cools.isEmpty(nowPosRunTask)){ boolean signNowPosRun = true; if (nowPosRunTask.getTaskStatus()==3){ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, nowPosRunTask.getTargetPositionStaNoPlcId()); StaProtocol staProtocol = devpThread.getStation().get(nowPosRunTask.getTargetPositionStaNo()); if (staProtocol == null ) { signNowPosRun =false; } if (signNowPosRun){ // 判断是否满足入库条件 if (!staProtocol.isAutoing() || staProtocol.isLoading() || staProtocol.getWorkNo() != 0 ){ signNowPosRun =false; } } } if (signNowPosRun){ 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 +568,30 @@ > avoidDistance - 50) {//无需避让 return true; } else { RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getOtherId()); TaskProtocolCache taskProtocolCacheOther = rgvThreadOther.getTaskProtocolCache(); TaskProtocol nowPosRunTask = taskProtocolCacheOther.getNowPosRunTask(rgvProtocolOther.getRgvPos()); if (!Cools.isEmpty(nowPosRunTask)){ boolean signNowPosRun = true; if (nowPosRunTask.getTaskStatus()==3){ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, nowPosRunTask.getTargetPositionStaNoPlcId()); StaProtocol staProtocol = devpThread.getStation().get(nowPosRunTask.getTargetPositionStaNo()); if (staProtocol == null ) { signNowPosRun =false; } if (signNowPosRun){ // 判断是否满足入库条件 if (!staProtocol.isAutoing() || staProtocol.isLoading() || staProtocol.getWorkNo() != 0 ){ signNowPosRun =false; } } } if (signNowPosRun){ 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()); @@ -899,8 +931,8 @@ } if (result != null && result.IsSuccess) { Thread.sleep(200); this.readStatus(); // Thread.sleep(50); // this.readStatus(); log.info("RGV 命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(taskProtocol)); log.error("RGV 命令下发 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); @@ -949,8 +981,8 @@ } if (result != null && result.IsSuccess) { Thread.sleep(200); this.readStatus(); // Thread.sleep(200); // this.readStatus(); log.info("RGV 命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON("null")); OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON("null"))); return true; 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; Thread.sleep(100L); 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 {