From c50f66695f4decb3786d11e4c5dfa515ce9a994b Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期二, 14 一月 2025 15:33:38 +0800
Subject: [PATCH] *
---
src/main/java/com/zy/core/thread/RgvThread.java | 2 +
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 18 +++++++--
src/main/java/com/zy/core/model/protocol/RgvProtocol.java | 1
src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java | 88 ++++++++++++++++++++++++++++++++++++++++++--
src/main/resources/application.yml | 2
5 files changed, 102 insertions(+), 9 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 8353ed6..35dc5bd 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/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;
}
}
diff --git a/src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java b/src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java
index 77a1873..7590c64 100644
--- a/src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java
+++ b/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;
+ }
+ }
}
diff --git a/src/main/java/com/zy/core/model/protocol/RgvProtocol.java b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
index 6defaa9..b44627f 100644
--- a/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
+++ b/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) 婕父鐩殑鍦�
/**
* 璧拌鍦ㄥ畾浣�
diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index 39c6825..b367363 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/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()));
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 1507a49..f068d4f 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -42,7 +42,7 @@
# 灏忚溅鏁�
rgvCount: 10
# 寤惰繜鏃堕棿
- rgvDate: 2
+ rgvDate: 0.5
# 涓嬩綅鏈洪厤缃�
wcs-slave:
--
Gitblit v1.9.1