src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/model/protocol/RgvProtocol.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/RgvThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -267,10 +267,20 @@ && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getAlarm() == 0) { if (rgvProtocol.getStatusType() == RgvStatusType.ROAM) { double finalVelocity = 0.0; // 最终速度 (m/s) double distance = (Math.pow(finalVelocity, 2) - Math.pow(rgvProtocol.instantaneousSpeed / 60, 2)) / (2 * acceleration); BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", wrkMast.getSourceStaNo())); if (distance * proportion > ((SortTheExecutionOfTheCarUtil.LatelyAndLessThan(basDevpPosition.getPlcPosition(), rgvProtocol.getRgvPos(), perimeter) + (rgvProtocol.instantaneousSpeed / 60) * proportion * rgvDate))) { // double finalVelocity = 0.0; // 最终速度 (m/s) // double distance = (Math.pow(finalVelocity, 2) - Math.pow(rgvProtocol.instantaneousSpeed / 60, 2)) / (2 * acceleration); // BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", wrkMast.getSourceStaNo())); // if (distance * proportion > ((SortTheExecutionOfTheCarUtil.LatelyAndLessThan(basDevpPosition.getPlcPosition(), rgvProtocol.getRgvPos(), perimeter) + (rgvProtocol.instantaneousSpeed / 60) * proportion * rgvDate))) { // continue; // } List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position", true)); if (basDevpPositions.isEmpty()) { log.error("获取所有站点信息异常,RGV任务下发失败,请联系管理员!!!"); break runRgv; } List<Integer> devpList = SortTheExecutionOfTheCarUtil.BasDevpPositionExtractSites(basDevpPositions); if (!SortTheExecutionOfTheCarUtil.calculateShortestDistanceDirection(devpList,wrkMast.getSourceStaNo().intValue(),rgvProtocol.getEndStaM().intValue())){ continue; } } src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java
@@ -462,16 +462,96 @@ public static Double LatelyAndLessThan(long devPosition,long rgvPosition,long perimeter){ long Difference = perimeter; if (devPosition >= rgvPosition){ if ((devPosition-rgvPosition) < Difference){ // if ((devPosition-rgvPosition) < Difference){ Difference = devPosition-rgvPosition; } // } } else { if (perimeter - (rgvPosition - devPosition) < Difference){ // if (perimeter - (rgvPosition - devPosition) < Difference){ Difference = perimeter - (rgvPosition - devPosition); } // } } return Double.valueOf(Difference); } public static int calculateShortestDistanceDistance(List<Integer> data, int a, int b) { Result result = calculateShortestDistance(data, a, b); return result.distance; } public static List<Integer> calculateShortestDistancePassedData(List<Integer> data, int a, int b) { Result result = calculateShortestDistance(data, a, b); return result.passedData; } // public static String calculateShortestDistanceDirection(List<Integer> data, int a, int b) { // Result result = calculateShortestDistance(data, a, b); // return result.direction; // } public static boolean calculateShortestDistanceDirection(List<Integer> data, int a, int b) { Result result = calculateShortestDistance(data, a, b); return result.direction.equals("向前走(顺时针)"); } public static void main(String[] args) { List<Integer> data = new ArrayList<>(); // 用 List<Integer> 初始化数据 for (int i = 1; i <= 9; i++) { data.add(i); } int a = 3; // 起点 int b = 3; // 终点 Result result = calculateShortestDistance(data, a, b); System.out.println("最近的距离是: " + result.distance); System.out.println("经过的数据: " + result.passedData); System.out.println("方向: " + result.direction); } public static Result calculateShortestDistance(List<Integer> data, int a, int b) { int length = data.size(); int indexA = data.indexOf(a); int indexB = data.indexOf(b); if (indexA == -1 || indexB == -1) { throw new IllegalArgumentException("列表中未找到指定的元素"); } // 顺时针方向的距离及经过的数据 List<Integer> clockwiseData = new ArrayList<>(); int clockwiseDistance = (indexB - indexA + length) % length; for (int i = 0; i <= clockwiseDistance; i++) { clockwiseData.add(data.get((indexA + i) % length)); } // 逆时针方向的距离及经过的数据 List<Integer> counterClockwiseData = new ArrayList<>(); int counterClockwiseDistance = (indexA - indexB + length) % length; for (int i = 0; i <= counterClockwiseDistance; i++) { counterClockwiseData.add(data.get((indexA - i + length) % length)); } // 比较距离并返回结果 if (clockwiseDistance <= counterClockwiseDistance) { return new Result(clockwiseDistance, clockwiseData, "向前走(顺时针)"); } else { return new Result(counterClockwiseDistance, counterClockwiseData, "向后走(逆时针)"); } } // 用于返回结果的类 static class Result { public int distance; public List<Integer> passedData; public String direction; public Result(int distance, List<Integer> passedData, String direction) { this.distance = distance; this.passedData = passedData; this.direction = direction; } } } src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -65,6 +65,7 @@ */ public Long RgvPos; public Double instantaneousSpeed;// 瞬时速度 (m/min) public Short endStaM;// 瞬时速度 (m/min) 漫游目的地 /** * 走行在定位 src/main/java/com/zy/core/thread/RgvThread.java
@@ -149,6 +149,7 @@ try { OperateResultExOne<byte[]> result = siemensNet.Read("DB100.0", (short) 20); OperateResultExOne<byte[]> resultV = siemensNet.Read("DB20.16", (short) 2); OperateResultExOne<byte[]> resultE = siemensNet.Read("DB20.26", (short) 2); if (result.IsSuccess) { if (null == rgvProtocol) { rgvProtocol = new RgvProtocol(); @@ -164,6 +165,7 @@ rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 14)); rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransUInt32(result.Content, 16)); rgvProtocol.setInstantaneousSpeed(Double.valueOf(siemensNet.getByteTransform().TransInt16(resultV.Content, 0))); rgvProtocol.setEndStaM(siemensNet.getByteTransform().TransInt16(resultE.Content, 0)); // rgvProtocol.setRgvPos((long)NumUtils.GetRandomIntInRange(1737000)); OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); src/main/resources/application.yml
@@ -42,7 +42,7 @@ # 小车数 rgvCount: 10 # 延迟时间 rgvDate: 2 rgvDate: 0.5 # 下位机配置 wcs-slave: