From 1dacf2305187f5c2fb44f03b6b754c46cb73ba25 Mon Sep 17 00:00:00 2001
From: L <L@132>
Date: 星期四, 19 三月 2026 08:53:59 +0800
Subject: [PATCH] *
---
src/main/java/com/zy/core/thread/RgvThread.java | 23 ++++++-
src/main/java/com/zy/asrs/controller/RgvController.java | 31 ++++++---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 84 +++++++++++++++++++++++++--
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java | 19 +++++
src/main/resources/license.lic | 0
5 files changed, 132 insertions(+), 25 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/RgvController.java b/src/main/java/com/zy/asrs/controller/RgvController.java
index 81e6b8c..cf6679d 100644
--- a/src/main/java/com/zy/asrs/controller/RgvController.java
+++ b/src/main/java/com/zy/asrs/controller/RgvController.java
@@ -348,22 +348,31 @@
if (rgvProtocol == null) {
continue;
}
- RingThroughParam ringThroughParam = new RingThroughParam();
+ try {
+ if (rgvProtocol.getRgvPos() == null || rgvProtocol.getModeType() == null || rgvProtocol.getStatusType() == null) {
+ log.warn("鐜┛浣嶇疆淇℃伅瀛樺湪绌哄瓧娈碉紝璺宠繃璇GV: rgvNo={}", rgv.getId());
+ continue;
+ }
+ RingThroughParam ringThroughParam = new RingThroughParam();
- ringThroughParam.setIndex(rgv.getId());
+ ringThroughParam.setIndex(rgv.getId());
// ringThroughParam.setIndex(i);
// double[] doubles = Utils.RingThroughXY2(perimeter, NumUtils.GetRandomIntInRange(183));
// double[] doubles = Utils.RingThroughXYRgv(perimeter, perimeter-rgvProtocol.RgvPos.doubleValue());
- double[] doubles = Utils.getRgvPosNew(perimeter, rgvProtocol.RgvPos.doubleValue());
+ double[] doubles = Utils.getRgvPosNew(perimeter, rgvProtocol.getRgvPos().doubleValue());
- ringThroughParam.setValueX(doubles[0]);
- ringThroughParam.setValueY(doubles[1]);
- ringThroughParam.setModeColor(rgvProtocol.modeType.color);
- ringThroughParam.setStatusColor(rgvProtocol.statusType.color);
- if (rgvProtocol.getModeType() == RgvModeType.AUTO){
- ringThroughParam.setAnimation(2);
+ ringThroughParam.setValueX(doubles[0]);
+ ringThroughParam.setValueY(doubles[1]);
+ ringThroughParam.setModeColor(rgvProtocol.getModeType().color);
+ ringThroughParam.setStatusColor(rgvProtocol.getStatusType().color);
+ if (rgvProtocol.getModeType() == RgvModeType.AUTO){
+ ringThroughParam.setAnimation(2);
+ }
+ result.add(ringThroughParam);
+ } catch (Exception e) {
+ // 鍗曞彴RGV鏁版嵁寮傚父涓嶅奖鍝嶅叾瀹僐GV缁樺埗
+ log.error("鐜┛浣嶇疆淇℃伅澶勭悊寮傚父锛岃烦杩囪RGV: rgvNo={}", rgv.getId(), e);
}
- result.add(ringThroughParam);
}
return R.ok().add(result);
}
@@ -593,4 +602,4 @@
return R.error("鍒濆鍖栧け璐ワ紒锛侊紒");
}
-}
\ No newline at end of file
+}
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 ccaa0ff..e6e8827 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -100,7 +100,7 @@
public synchronized int[][] getStePositionNearby(Integer siteNo) {
try {
List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position", true));
- if (basDevpPositions.isEmpty()) {
+ if (basDevpPositions == null || basDevpPositions.isEmpty()) {
log.error("鑾峰彇鎵�鏈夌珯鐐逛俊鎭紓甯�");
return null;
}
@@ -114,8 +114,11 @@
List<List<Long>> rgvPositionList = new ArrayList<>();
for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+ if (rgvThread == null) {
+ continue;
+ }
RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
- if (rgvProtocol == null) {
+ if (rgvProtocol == null || rgvProtocol.getRgvNo() == null || rgvProtocol.getRgvPos() == null) {
continue;
}
List<Long> rgvPosition = new ArrayList<>();
@@ -123,17 +126,31 @@
rgvPosition.add(rgvProtocol.getRgvPos());
rgvPositionList.add(rgvPosition);
}
+ if (rgvPositionList.isEmpty()) {
+ return null;
+ }
Integer rgvNo = SortTheExecutionOfTheCarUtil.LatelyAndGreaterThan(rgvPositionList, sitePosition, perimeter);
if (rgvNo == -1) {
log.info("鏇存柊灏忚溅鎺掑簭淇℃伅寮傚父={}", rgvNo);
return null;
}
List<BasCircularShuttle> basCircularShuttleList = basCircularShuttleService.selectList(new EntityWrapper<BasCircularShuttle>().orderBy("rgv_id", true));
+ if (basCircularShuttleList == null || basCircularShuttleList.isEmpty()) {
+ return null;
+ }
int[][] ints = new int[basCircularShuttleList.size()][2];
for (BasCircularShuttle basCircularShuttle : basCircularShuttleList) {
+ if (basCircularShuttle == null || basCircularShuttle.getRgvNo() == null || basCircularShuttle.getRgvId() == null) {
+ continue;
+ }
+ if (basCircularShuttle.getRgvNo() < 1 || basCircularShuttle.getRgvNo() > basCircularShuttleList.size()) {
+ continue;
+ }
ints[basCircularShuttle.getRgvNo() - 1] = new int[]{basCircularShuttle.getRgvNo(), basCircularShuttle.getRgvId()};
}
- if (basCircularShuttleList.get(0).getRgvNo().equals(rgvNo)) {
+ if (basCircularShuttleList.get(0) != null
+ && basCircularShuttleList.get(0).getRgvNo() != null
+ && basCircularShuttleList.get(0).getRgvNo().equals(rgvNo)) {
return ints;
}
// String[] oldList = new String[ints.length];
@@ -145,7 +162,7 @@
} catch (Exception e) {
- log.error("鑷姩鏇存柊灏忚溅鎺掑簭淇℃伅澶辫触锛屽紓甯革細" + e);
+ log.error("鑷姩鏇存柊灏忚溅鎺掑簭淇℃伅澶辫触(getStePositionNearby), siteNo={}", siteNo, e);
}
return null;
@@ -159,12 +176,23 @@
boolean sign = false;
Integer rgvNo = 0;
List<BasCircularShuttle> basCircularShuttleList = basCircularShuttleService.selectList(new EntityWrapper<BasCircularShuttle>().orderBy("rgv_id", true));
+ if (basCircularShuttleList == null || basCircularShuttleList.isEmpty()) {
+ return;
+ }
for (BasCircularShuttle basCircularShuttle : basCircularShuttleList) {
+ if (basCircularShuttle == null || basCircularShuttle.getRgvNo() == null) {
+ sign = true;
+ continue;
+ }
if (basCircularShuttle.getStatus() != 0){
sign = true;
continue;
}
RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basCircularShuttle.getRgvNo());
+ if (rgvThread == null) {
+ sign = true;
+ continue;
+ }
RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
if (rgvProtocol == null) {
sign = true;
@@ -178,6 +206,12 @@
if (sign && rgvNo != 0) {
int[][] ints = new int[basCircularShuttleList.size()][2];
for (BasCircularShuttle basCircularShuttle : basCircularShuttleList) {
+ if (basCircularShuttle == null || basCircularShuttle.getRgvNo() == null || basCircularShuttle.getRgvId() == null) {
+ continue;
+ }
+ if (basCircularShuttle.getRgvNo() < 1 || basCircularShuttle.getRgvNo() > basCircularShuttleList.size()) {
+ continue;
+ }
ints[basCircularShuttle.getRgvNo() - 1] = new int[]{basCircularShuttle.getRgvNo(), basCircularShuttle.getRgvId()};
}
// String[] oldList = new String[ints.length];
@@ -192,14 +226,23 @@
// log.info("鏇存柊灏忚溅鎺掑簭淇℃伅锛氬師濮嬪皬杞﹀彿rgvNo={},灏忚溅閲嶆柊鎺掑簭淇℃伅={},灏忚溅鍘熷鎺掑簭淇℃伅={}",rgvNo,Arrays.toString(newList),Arrays.toString(oldList));
for (BasCircularShuttle basCircularShuttle : basCircularShuttleList) {
+ if (basCircularShuttle == null || basCircularShuttle.getRgvNo() == null) {
+ continue;
+ }
+ if (basCircularShuttle.getRgvNo() < 1 || basCircularShuttle.getRgvNo() > rgvList.length) {
+ continue;
+ }
int[] rgv = rgvList[basCircularShuttle.getRgvNo() - 1];
+ if (rgv == null || rgv.length < 2) {
+ continue;
+ }
basCircularShuttle.setRgvId(rgv[1]);
basCircularShuttleService.updateById(basCircularShuttle);
}
}
} catch (Exception e) {
- log.error("鑷姩鏇存柊灏忚溅鎺掑簭淇℃伅澶辫触锛屽紓甯革細" + e);
+ log.error("鑷姩鏇存柊灏忚溅鎺掑簭淇℃伅澶辫触(updateStePosition)", e);
}
}
@@ -219,13 +262,22 @@
}
BasCircularShuttle basCircularShuttle = basCircularShuttleService.selectOne(new EntityWrapper<BasCircularShuttle>().eq("rgv_id", 1));
+ if (basCircularShuttle == null || basCircularShuttle.getRgvNo() == null) {
+ return;
+ }
RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basCircularShuttle.getRgvNo());
+ if (rgvThread == null) {
+ return;
+ }
RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
- if (rgvProtocol == null) {
+ if (rgvProtocol == null || rgvProtocol.getRgvPos() == null) {
return;
}
List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position", true));
List<BasDevpPosition> basDevpPositionDevRegion = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("dev_region", true));
+ if (basDevpPositions == null || basDevpPositions.isEmpty() || basDevpPositionDevRegion == null || basDevpPositionDevRegion.isEmpty()) {
+ return;
+ }
Integer devNo = SortTheExecutionOfTheCarUtil.LatelyAndLessThan(basDevpPositions, rgvProtocol.getRgvPos(), perimeter);
BasDevpPosition[] basDevpPositionsList = SortTheExecutionOfTheCarUtil.devpNoSort(basDevpPositions, devNo);
BasDevpPosition[] basDevpPositionsListUN = SortTheExecutionOfTheCarUtil.devpNoSortUN(basDevpPositionsList);
@@ -355,14 +407,20 @@
}
BasCircularShuttle basCircularShuttle = basCircularShuttleService.selectOne(new EntityWrapper<BasCircularShuttle>().eq("rgv_no", rgvNo));
+ if (basCircularShuttle == null) {
+ continue;
+ }
if (basCircularShuttle.getStatus() != 0){
continue ;
}
long rgvId = basCircularShuttle.getRgvId();
RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basCircularShuttle.getRgvNo());
+ if (rgvThread == null) {
+ continue;
+ }
RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
- if (rgvProtocol == null) {
+ if (rgvProtocol == null || rgvProtocol.getRgvNo() == null || rgvProtocol.getRgvPos() == null) {
continue;
}
@@ -377,6 +435,9 @@
&& rgvProtocol.getRgvPosInt() != 0
&& rgvProtocol.getAlarm() == 0) {
BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", wrkMast.getSourceStaNo()));
+ if (basDevpPosition == null || basDevpPosition.getPlcPosition() == null) {
+ continue;
+ }
if (basDevpPosition.getPlcPosition()>rgvProtocol.getRgvPos()){
if (basDevpPosition.getPlcPosition()-rgvProtocol.getRgvPos()>taskRunPerimeter){
if (!rgvNoM.contains(rgvProtocol.getRgvNo())){
@@ -479,6 +540,9 @@
continue;
}
RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo);
+ if (rgvThread == null) {
+ continue;
+ }
RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
if (rgvProtocol == null) {
continue;
@@ -507,6 +571,9 @@
for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
try {
RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+ if (rgvThread == null) {
+ continue;
+ }
RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
if (rgvProtocol == null) {
continue;
@@ -596,6 +663,9 @@
for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
try {
RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+ if (rgvThread == null) {
+ continue;
+ }
RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
if (rgvProtocol == null) {
continue;
diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index 075ff8b..2d43235 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -76,6 +76,12 @@
List<WcsRgvListParam> wcsRgvListParamList = new ArrayList<>();
List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<>());
List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position",true));
+ if (wrkMastList == null) {
+ wrkMastList = new ArrayList<>();
+ }
+ if (basDevpPositions == null) {
+ basDevpPositions = new ArrayList<>();
+ }
for (WrkMast wrkMast : wrkMastList){
WcsTaskListParam wcsTaskListParam = new WcsTaskListParam(wrkMast);
@@ -94,11 +100,19 @@
WcsRgvListParam wcsRgvListParam = new WcsRgvListParam();
wcsRgvListParam.setRgvNo(rgv.getId().toString());
wcsRgvListParam.setTaskNo(Cools.isEmpty(rgvProtocol.getTaskNo1()) ? null:rgvProtocol.getTaskNo1().toString());
+ if (rgvProtocol.getStatusType() == null || rgvProtocol.getStatusType().id == null) {
+ continue;
+ }
wcsRgvListParam.setStatus(rgvProtocol.statusType.id);
wcsRgvListParam.setCurrPos(rgvProtocol.RgvPos);
- wcsRgvListParam.setCurrSta(SortTheExecutionOfTheCarUtil.LatelyAndLessThanWcs(basDevpPositions,rgvProtocol.getRgvPos(),perimeter).toString());
+ if (rgvProtocol.getRgvPos() != null && !basDevpPositions.isEmpty()) {
+ Integer currSta = SortTheExecutionOfTheCarUtil.LatelyAndLessThanWcs(basDevpPositions, rgvProtocol.getRgvPos(), perimeter);
+ wcsRgvListParam.setCurrSta(currSta == null ? null : currSta.toString());
+ } else {
+ wcsRgvListParam.setCurrSta(null);
+ }
List<String> arrayList = new ArrayList<>();
- if (rgvProtocol.getAlarm()!=0){
+ if (rgvProtocol.getAlarm() != null && rgvProtocol.getAlarm()!=0){
arrayList.add(rgvProtocol.getAlarm$());
}
wcsRgvListParam.setError(arrayList);
@@ -109,6 +123,7 @@
wcsDataSynchronizationParam.setTimestamp(timestamp);
return R.ok().add(wcsDataSynchronizationParam);
} catch (Exception e){
+ log.error("wcsTaskStatus鎺ュ彛寮傚父, timestamp={}", timestamp, e);
return R.error("寮傚父").add("寮傚父淇℃伅锛�"+e);
}
}
diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index ce27b3f..313db76 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -55,7 +55,7 @@
* 宸ヤ綅2澶嶄綅淇″彿
*/
private boolean resetFlag2 = false;
- private boolean connectRgv = false;
+ private volatile boolean connectRgv = false;
private boolean alarmChangeSign = false;
public RgvThread(RgvSlave slave) {
@@ -65,7 +65,8 @@
@Override
@SuppressWarnings("InfiniteLoopStatement")
public void run() {
- connectRgv = this.connect();
+ // 绾跨▼鍚姩鍗崇粰鍗忚浣撳畬鏁撮粯璁ゅ��
+ initRgv();
// 鍚姩绾跨▼鑷姩閲嶈繛
new Thread(this::rgvConnect).start();
@@ -157,6 +158,9 @@
// 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
BasCircularShuttleService basCircularShuttleService = SpringUtils.getBean(BasCircularShuttleService.class);
BasCircularShuttle basCircularShuttle = basCircularShuttleService.selectOne(new EntityWrapper<BasCircularShuttle>().eq("rgv_no", slave.getId()));
+ if (basCircularShuttle == null) {
+ continue;
+ }
if (basCircularShuttle.getStatus() != 0){
continue;
}
@@ -225,6 +229,9 @@
rgvProtocol.setStatus2((short)-1);
rgvProtocol.setLoaded2((short)0);
rgvProtocol.setAlarm((short)0);
+ rgvProtocol.setAlarmList(new ArrayList<>());
+ rgvProtocol.setInstantaneousSpeed(0D);
+ rgvProtocol.setEndStaM((short)0);
rgvProtocol.setxSpeed((short) 0);
rgvProtocol.setxDistance((short) 0);
rgvProtocol.setxDuration((short) 0);
@@ -352,8 +359,11 @@
private void rgvOpt(RgvCommand command) {
try{
BasRgvOptService basRgvOptService = SpringUtils.getBean(BasRgvOptService.class);
- BasRgvOpt basRgvOpt = new BasRgvOpt(rgvProtocol.getTaskNo1().intValue(), rgvProtocol.getRgvNo(), rgvProtocol.getRgvPosInt(), command);
- log.info(rgvProtocol.getRgvNo()+"鍙峰皬杞﹀啓鍏ュ懡浠ゅ畾浣嶅�硷細"+rgvProtocol.getRgvPosInt());
+ int taskNo = (rgvProtocol == null || rgvProtocol.getTaskNo1() == null) ? 0 : rgvProtocol.getTaskNo1().intValue();
+ int rgvNo = (rgvProtocol == null || rgvProtocol.getRgvNo() == null) ? slave.getId() : rgvProtocol.getRgvNo();
+ int rgvPos = (rgvProtocol == null) ? 0 : rgvProtocol.getRgvPosInt();
+ BasRgvOpt basRgvOpt = new BasRgvOpt(taskNo, rgvNo, rgvPos, command);
+ log.info(rgvNo+"鍙峰皬杞﹀啓鍏ュ懡浠ゅ畾浣嶅�硷細"+rgvPos);
basRgvOptService.insert(basRgvOpt);
}catch (Exception e){
log.error("RGV鍐欏叆鍛戒护淇濆瓨澶辫触锛侊紒");
@@ -362,7 +372,10 @@
private void rgvOpt(Long command) {
try{
BasRgvOptService basRgvOptService = SpringUtils.getBean(BasRgvOptService.class);
- BasRgvOpt basRgvOpt = new BasRgvOpt(rgvProtocol.getTaskNo1().intValue(), rgvProtocol.getRgvNo(), rgvProtocol.getRgvPosI(), command);
+ int taskNo = (rgvProtocol == null || rgvProtocol.getTaskNo1() == null) ? 0 : rgvProtocol.getTaskNo1().intValue();
+ int rgvNo = (rgvProtocol == null || rgvProtocol.getRgvNo() == null) ? slave.getId() : rgvProtocol.getRgvNo();
+ int rgvPos = (rgvProtocol == null) ? 0 : rgvProtocol.getRgvPosI();
+ BasRgvOpt basRgvOpt = new BasRgvOpt(taskNo, rgvNo, rgvPos, command);
basRgvOptService.insert(basRgvOpt);
}catch (Exception e){
log.error("RGV鍐欏叆鍛戒护淇濆瓨澶辫触锛侊紒");
diff --git a/src/main/resources/license.lic b/src/main/resources/license.lic
index 216d19e..0ed5d92 100644
--- a/src/main/resources/license.lic
+++ b/src/main/resources/license.lic
Binary files differ
--
Gitblit v1.9.1