From 86cdf4583ebb884ecdcd7c90f057c103bbace121 Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期三, 08 一月 2025 18:03:25 +0800
Subject: [PATCH] *
---
src/main/java/com/zy/core/thread/RgvThread.java | 2
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 100 +++++++++++++++++++--------------
src/main/java/com/zy/core/model/protocol/RgvProtocol.java | 1
src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java | 16 +++++
src/main/resources/application.yml | 7 ++
5 files changed, 84 insertions(+), 42 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 e400430..04bcb9b 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -51,6 +51,12 @@
@Value("${constant-parameters.perimeter}")
private Long perimeter;
+ @Value("${constant-parameters.proportion}")
+ private Long proportion;
+ @Value("${constant-parameters.acceleration}")
+ private Long acceleration;
+ @Value("${constant-parameters.rgvCount}")
+ private Long rgvCount;
/**
* 绔欑偣浠诲姟妫�娴� 鏇存柊灏忚溅浣嶇疆淇℃伅
*/
@@ -236,55 +242,65 @@
runRgv:
for (List<WrkMast> wrkMastList : wrkMastLists){
for (WrkMast wrkMast: wrkMastList){
+ while (rgvId <= rgvCount){
+ rgvId++;
+ log.info("瀛樺湪浠诲姟锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(wrkMast));
- log.error("瀛樺湪浠诲姟锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(wrkMast));
-
- rgvId++;
- BasCircularShuttle basCircularShuttle = basCircularShuttleService.selectOne(new EntityWrapper<BasCircularShuttle>().eq("rgv_id", rgvId));
- RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basCircularShuttle.getRgvNo());
- RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
- if (rgvProtocol == null){
- continue ;
- }
- List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("rgv_no", rgvProtocol.getRgvNo()).eq("wrk_sts", 2L));
- if (!wrkMasts.isEmpty()){
- continue ;
- }
- if (rgvProtocol != null
- && rgvProtocol.modeType == RgvModeType.AUTO
- && (rgvProtocol.getStatusType() == RgvStatusType.IDLE || rgvProtocol.getStatusType() == RgvStatusType.ROAM)
- && rgvProtocol.getTaskNo1()==0
- && rgvProtocol.getAlarm() == 0){
- 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.getSourceStaNo().shortValue()); //宸ヤ綅1璧风偣
- rgvCommand.setDestinationStaNo1(wrkMast.getStaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣
- rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭
- if (!MessageQueue.offer(SlaveType.Rgv, rgvProtocol.getRgvNo(), new Task(2, rgvCommand))) {
- //
- log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+ if (rgvId > rgvCount){
break runRgv;
}
- log.error("RGV鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
-
- wrkMast.setWrkSts(2L);
- wrkMast.setRgvNo(rgvProtocol.getRgvNo());
- wrkMast.setAppeTime(new Date());
- try{
- wrkMastService.updateById(wrkMast);
+ BasCircularShuttle basCircularShuttle = basCircularShuttleService.selectOne(new EntityWrapper<BasCircularShuttle>().eq("rgv_id", rgvId));
+ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basCircularShuttle.getRgvNo());
+ RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+ if (rgvProtocol == null){
continue ;
- }catch (Exception e){
- log.error("鏇存柊灏忚溅浠诲姟澶辫触,浠诲姟鍙凤細"+wrkMast.getWrkNo());
}
- break runRgv;
- } else {
- break runRgv;
+ 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)){
+ continue ;
+ }
+
+ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("rgv_no", rgvProtocol.getRgvNo()).eq("wrk_sts", 2L));
+ if (!wrkMasts.isEmpty()){
+ continue ;
+ }
+ if (rgvProtocol != null
+ && rgvProtocol.modeType == RgvModeType.AUTO
+ && (rgvProtocol.getStatusType() == RgvStatusType.IDLE || rgvProtocol.getStatusType() == RgvStatusType.ROAM)
+ && rgvProtocol.getTaskNo1()==0
+ && rgvProtocol.getAlarm() == 0){
+ 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.getSourceStaNo().shortValue()); //宸ヤ綅1璧风偣
+ rgvCommand.setDestinationStaNo1(wrkMast.getStaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣
+ rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭
+ if (!MessageQueue.offer(SlaveType.Rgv, rgvProtocol.getRgvNo(), new Task(2, rgvCommand))) {
+ //
+ log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+ break runRgv;
+ }
+ log.info("RGV鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+
+ wrkMast.setWrkSts(2L);
+ wrkMast.setRgvNo(rgvProtocol.getRgvNo());
+ wrkMast.setAppeTime(new Date());
+ try{
+ wrkMastService.updateById(wrkMast);
+ break;
+ }catch (Exception e){
+ log.error("鏇存柊灏忚溅浠诲姟澶辫触,浠诲姟鍙凤細"+wrkMast.getWrkNo());
+ }
+ break runRgv;
+ } else {
+ break runRgv;
+ }
}
}
-
}
}
diff --git a/src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java b/src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java
index 93316ad..77a1873 100644
--- a/src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java
+++ b/src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java
@@ -458,4 +458,20 @@
// }
+ //鑾峰彇鏈�杩戝苟鍦ㄥ綋鍓嶄綅缃墠杈圭殑浣嶇疆 0==>1000===>1000000==>0
+ public static Double LatelyAndLessThan(long devPosition,long rgvPosition,long perimeter){
+ long Difference = perimeter;
+ if (devPosition >= rgvPosition){
+ if ((devPosition-rgvPosition) < Difference){
+ Difference = devPosition-rgvPosition;
+ }
+ } else {
+ if (perimeter - (rgvPosition - devPosition) < Difference){
+ Difference = perimeter - (rgvPosition - devPosition);
+ }
+ }
+ return Double.valueOf(Difference);
+ }
+
+
}
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 4f7df3b..6defaa9 100644
--- a/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -64,6 +64,7 @@
* RGV褰撳墠浣嶇疆
*/
public Long RgvPos;
+ public Double instantaneousSpeed;// 鐬椂閫熷害 (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 014bacc..5323b82 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -147,6 +147,7 @@
private void readStatus(){
try {
OperateResultExOne<byte[]> result = siemensNet.Read("DB100.0", (short) 20);
+ OperateResultExOne<byte[]> resultV = siemensNet.Read("DB20.16", (short) 2);
if (result.IsSuccess) {
if (null == rgvProtocol) {
rgvProtocol = new RgvProtocol();
@@ -161,6 +162,7 @@
rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 12));
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.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 0b667df..8c6ac9e 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -33,7 +33,14 @@
enable: false
constant-parameters:
+ # 杞ㄩ亾鎬婚暱
perimeter: 1737000
+ # 杞ㄩ亾杞崲涓虹背姣斾緥
+ proportion: 10000
+ # 鍔犻�熷害 m/s^2
+ acceleration: -2
+ # 灏忚溅鏁�
+ rgvCount: 10
# 涓嬩綅鏈洪厤缃�
wcs-slave:
--
Gitblit v1.9.1