From ccd6309576bfa66ddf40b8a48202ced37c05333a Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期三, 23 四月 2025 14:32:39 +0800
Subject: [PATCH] *
---
src/main/java/com/zy/core/enums/RgvStatusType.java | 1
src/main/java/com/zy/asrs/service/BasDevpPositionService.java | 8
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 69 ++++++
src/main/java/com/zy/asrs/mapper/BasDevpPositionMapper.java | 12 +
src/main/resources/application-prod.yml | 6
src/main/java/com/zy/asrs/service/impl/BasDevpPositionServiceImpl.java | 12 +
src/main/java/com/zy/core/thread/RgvThread.java | 299 ++++++++++++++++++++++++-----
src/main/java/com/zy/core/cache/TaskProtocolCache.java | 8
src/main/java/com/zy/core/model/RgvSlave.java | 4
src/main/resources/mapper/BasDevpPositionMapper.xml | 14 +
src/main/java/com/zy/core/model/protocol/RgvTaskProtocol.java | 25 ++
src/main/java/com/zy/core/MainProcess.java | 2
src/main/java/com/zy/core/cache/RgvTaskCache.java | 45 ++++
src/main/java/com/zy/core/model/protocol/RgvProtocol.java | 9
src/main/java/com/zy/asrs/entity/BasDevpPosition.java | 52 +++++
src/main/resources/application.yml | 2
16 files changed, 504 insertions(+), 64 deletions(-)
diff --git a/src/main/java/com/zy/asrs/entity/BasDevpPosition.java b/src/main/java/com/zy/asrs/entity/BasDevpPosition.java
new file mode 100644
index 0000000..e1795f8
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/BasDevpPosition.java
@@ -0,0 +1,52 @@
+package com.zy.asrs.entity;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@TableName("\"SOURCE\".\"asr_bas_devp_position\"")
+public class BasDevpPosition implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ID
+ */
+ @ApiModelProperty(value= "ID")
+ @TableId(value = "ID", type = IdType.AUTO)
+ private Long id;
+
+ @ApiModelProperty(value= "")
+ @TableField("DEV_NO")
+ private Integer devNo;
+
+ @ApiModelProperty(value= "")
+ @TableField("PLC_ID")
+ private Integer plcId;
+
+ @ApiModelProperty(value= "")
+ @TableField("PLC_POSITION")
+ private Long plcPosition;
+
+ public BasDevpPosition() {}
+
+ public BasDevpPosition(Integer devNo, Integer plcId, Long plcPosition) {
+ this.devNo = devNo;
+ this.plcId = plcId;
+ this.plcPosition = plcPosition;
+ }
+
+// BasDevpPosition basDevpPosition = new BasDevpPosition(
+// null, //
+// null, //
+// null //
+// );
+
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/BasDevpPositionMapper.java b/src/main/java/com/zy/asrs/mapper/BasDevpPositionMapper.java
new file mode 100644
index 0000000..213991c
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/BasDevpPositionMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.BasDevpPosition;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface BasDevpPositionMapper extends BaseMapper<BasDevpPosition> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/BasDevpPositionService.java b/src/main/java/com/zy/asrs/service/BasDevpPositionService.java
new file mode 100644
index 0000000..ee3cc4d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/BasDevpPositionService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.BasDevpPosition;
+
+public interface BasDevpPositionService extends IService<BasDevpPosition> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/BasDevpPositionServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasDevpPositionServiceImpl.java
new file mode 100644
index 0000000..7609b3f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/BasDevpPositionServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.entity.BasDevpPosition;
+import com.zy.asrs.mapper.BasDevpPositionMapper;
+import com.zy.asrs.service.BasDevpPositionService;
+import org.springframework.stereotype.Service;
+
+@Service("basDevpPositionService")
+public class BasDevpPositionServiceImpl extends ServiceImpl<BasDevpPositionMapper, BasDevpPosition> implements BasDevpPositionService {
+
+}
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 dffdfc5..c1c4edb 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -19,13 +19,16 @@
import com.zy.core.CrnThread;
import com.zy.core.DevpThread;
import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.RgvStatusCache;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.*;
import com.zy.core.model.CrnSlave;
import com.zy.core.model.DevpSlave;
+import com.zy.core.model.RgvSlave;
import com.zy.core.model.Task;
import com.zy.core.model.command.CrnCommand;
import com.zy.core.model.protocol.CrnProtocol;
+import com.zy.core.model.protocol.RgvProtocol;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.BarcodeThread;
@@ -1103,4 +1106,70 @@
return taskWrk;
}
+ public boolean deviceDetection(RgvSlave slave){
+ RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+ if (rgvProtocol == null) {
+ return false;
+ }
+ if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L)
+ || (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
+ return false;
+ }
+ RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+ if (rgvProtocolOther == null) {
+ return false;
+ }
+ if (rgvProtocolOther.statusEnable){
+ if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public boolean rgvOtherStatusEnable(RgvSlave slave){
+ RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+ if (rgvProtocolOther == null) {
+ return true;
+ }
+ if (rgvProtocolOther.statusEnable){
+// if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) {
+ return true;
+// }
+ }
+ return false;
+ }
+
+
+ private void sc(){
+
+
+ // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+ for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
+ if (!deviceDetection(rgvSlave)){
+ continue;
+ }
+ RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
+
+ RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(rgvSlave.getOtherId());
+
+ //姹傚嚭褰撳墠杞﹀彲杩愯鑼冨洿
+ Long[] farthestPoint = new Long[]{0L,0L};
+ if (!rgvProtocolOther.statusEnable){
+ farthestPoint = new Long[]{0L,0L};
+ } else {
+ if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)){
+
+ }
+ }
+
+
+ // 閬嶅巻鍏ュ簱鍙�
+ for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSStn()) {
+
+ }
+ }
+
+ }
+
}
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index ca69fe5..f3a40ba 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -51,6 +51,8 @@
// 鍫嗗灈鏈哄紓甯镐俊鎭褰�
mainService.recCrnErr();
+
+
} catch (Exception e) {
e.printStackTrace();
}
diff --git a/src/main/java/com/zy/core/cache/RgvTaskCache.java b/src/main/java/com/zy/core/cache/RgvTaskCache.java
new file mode 100644
index 0000000..e9204f3
--- /dev/null
+++ b/src/main/java/com/zy/core/cache/RgvTaskCache.java
@@ -0,0 +1,45 @@
+package com.zy.core.cache;
+
+import com.zy.core.model.protocol.RgvProtocol;
+import com.zy.core.model.protocol.RgvTaskProtocol;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Created by IX on 2025/02/21
+ */
+public class RgvTaskCache {
+ // 鏈湴缂撳瓨锛岄敭涓� currentPosition锛屽�间负 DeviceStatus
+ private static final ConcurrentHashMap<Integer, RgvTaskProtocol> cache = new ConcurrentHashMap<>();
+
+ /**
+ * 鏇存柊璁惧鐘舵��
+ */
+ public static void updateRgvStatus(RgvTaskProtocol status) {
+ try {
+ cache.put(status.getRgvNo(), status);
+ } finally {
+ }
+ }
+
+ /**
+ * 鑾峰彇璁惧鐘舵��
+ */
+ public static RgvTaskProtocol getRgvStatus(Integer RgvNo) {
+ try {
+ return cache.get(RgvNo);
+ } finally {
+ }
+ }
+
+ /**
+ * 鑾峰彇鎵�鏈夎澶囩姸鎬�
+ */
+ public static ConcurrentHashMap<Integer, RgvTaskProtocol> getAllRgvStatus() {
+ try {
+ return new ConcurrentHashMap<>(cache); // 杩斿洖鍓湰
+ } finally {
+ }
+ }
+
+}
diff --git a/src/main/java/com/zy/core/cache/TaskProtocolCache.java b/src/main/java/com/zy/core/cache/TaskProtocolCache.java
index e17f307..50fa398 100644
--- a/src/main/java/com/zy/core/cache/TaskProtocolCache.java
+++ b/src/main/java/com/zy/core/cache/TaskProtocolCache.java
@@ -66,6 +66,14 @@
/**
* 鑾峰彇鎵�鏈夊彇浠诲姟
*/
+ public List<TaskProtocol> getTakeOrPutTaskProtocol(short loaded) {
+ if (loaded == 0){
+ return getAllTakeTaskProtocol();
+ } else if (loaded == 1){
+ return getAllPutTaskProtocol();
+ }
+ return new ArrayList<>();
+ }
public List<TaskProtocol> getAllTakeTaskProtocol() {
// lock.readLock().lock(); // 鍔犺閿�
try {
diff --git a/src/main/java/com/zy/core/enums/RgvStatusType.java b/src/main/java/com/zy/core/enums/RgvStatusType.java
index 6ef70b2..a43b3cd 100644
--- a/src/main/java/com/zy/core/enums/RgvStatusType.java
+++ b/src/main/java/com/zy/core/enums/RgvStatusType.java
@@ -4,6 +4,7 @@
NONE(-1, "绂荤嚎"),
IDLE(0, "绌洪棽"),
+ ROAM(100000, "婕父"),
WORKING(1, "浣滀笟涓�"),
SOS(2, "鎶ヨ"),
FETCHING(11, "鍙栬揣涓�"),
diff --git a/src/main/java/com/zy/core/model/RgvSlave.java b/src/main/java/com/zy/core/model/RgvSlave.java
index b354f8e..59b78ca 100644
--- a/src/main/java/com/zy/core/model/RgvSlave.java
+++ b/src/main/java/com/zy/core/model/RgvSlave.java
@@ -24,6 +24,10 @@
private Integer otherId;
+ private Long carBodyJiaoMing;
+
+ private Long carBodyKunPeng;
+
// RGV鍏ュ簱婧愮珯鐐�
private List<RgvStn> rgvInSStn = new ArrayList<>();
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 902050f..081e59b 100644
--- a/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -49,6 +49,7 @@
* RGV褰撳墠浣嶇疆
*/
public Long RgvPos = 0L;
+ public Long RgvPosDestination = 0L;
/**
* 璧拌鍦ㄥ畾浣�
@@ -78,14 +79,14 @@
public Float xDuration;
/**
- * 鏄惁閬胯
+ * 杞﹁韩
*/
- public Short Avoid;//0\1\2
+ public Long carBodyJiaoMing = 0L;
/**
- * 閬胯鐩殑鍦�
+ * 杞﹁韩
*/
- public Short AvoidingTheDestination;
+ public Long carBodyKunPeng = 0L;
/**
* 鏄惁鍚敤
diff --git a/src/main/java/com/zy/core/model/protocol/RgvTaskProtocol.java b/src/main/java/com/zy/core/model/protocol/RgvTaskProtocol.java
new file mode 100644
index 0000000..2bb5cf2
--- /dev/null
+++ b/src/main/java/com/zy/core/model/protocol/RgvTaskProtocol.java
@@ -0,0 +1,25 @@
+package com.zy.core.model.protocol;
+
+import lombok.Data;
+
+/**
+ * Created by IX on 2025/02/21
+ */
+@Data
+public class RgvTaskProtocol {
+
+
+ private Integer RgvNo;
+
+ /**
+ * 鏄惁閬胯
+ */
+ public Integer Avoid;//0\1\2
+
+ /**
+ * 閬胯鐩殑鍦�
+ */
+ public Long AvoidingTheDestination;
+
+ public RgvTaskProtocol(){}
+}
diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index 620c6e5..15214fe 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -14,10 +14,7 @@
import com.zy.asrs.service.BasRgvService;
import com.zy.asrs.utils.RouteUtils;
import com.zy.core.ThreadHandler;
-import com.zy.core.cache.MessageQueue;
-import com.zy.core.cache.OutputQueue;
-import com.zy.core.cache.RgvStatusCache;
-import com.zy.core.cache.TaskProtocolCache;
+import com.zy.core.cache.*;
import com.zy.core.enums.RgvModeType;
import com.zy.core.enums.RgvStatusType;
import com.zy.core.enums.RgvTaskModeType;
@@ -26,9 +23,11 @@
import com.zy.core.model.Task;
import com.zy.core.model.command.RgvCommand;
import com.zy.core.model.protocol.RgvProtocol;
+import com.zy.core.model.protocol.RgvTaskProtocol;
import com.zy.core.model.protocol.TaskProtocol;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
import java.text.MessageFormat;
import java.util.Date;
@@ -47,6 +46,12 @@
private RgvSlave slave;
// private RgvProtocol rgvProtocol;
private TaskProtocolCache taskProtocolCache = new TaskProtocolCache();
+ // # 杞ㄩ亾鎬婚暱
+ private Long trackEntireLength = 100L;
+ //# 杞ㄩ亾鍩哄噯鐐�
+ private Long trackBenchmark = 100L;
+ // # 閬胯璺濈
+ private Long avoidDistance = 100L;
/**
* 宸ヤ綅1澶嶄綅淇″彿
@@ -71,10 +76,9 @@
new Thread(this::readStatusRgv).start();
// 鍚姩浠诲姟涓嬪彂绾跨▼
- new Thread(this::taskTakeIssued).start();
+ new Thread(this::taskIssued).start();
- new Thread(this::taskPutIssued).start();
-
+ // 鍚姩婕父绾跨▼
new Thread(this::taskWalkIssued).start();
}
}
@@ -97,9 +101,45 @@
}
/**
+ * 婕父
+ */
+ private void taskWalkIssued() {
+ while (true) {
+ try {
+ // 浼戠湢 1 绉�
+ Thread.sleep(100);
+
+ if (!deviceDetection()){
+ continue;
+ }
+ RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+ if (rgvTaskProtocol == null) {
+ initRgv();
+ rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+ }
+ if (rgvTaskProtocol.getAvoid() != 1) {
+ continue;
+ }
+ TaskProtocol issued = new TaskProtocol();
+ issued.setTaskNo(32222L);
+ issued.setTargetPosition(rgvTaskProtocol.getAvoidingTheDestination());
+ write(issued);
+ rgvTaskProtocol.setAvoid(0);
+
+ Thread.sleep(200);
+ RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+
+ } catch (Exception e) {
+ log.error("RGV琛岃蛋浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�"+e.getMessage());
+// e.printStackTrace();
+ }
+ }
+ }
+
+ /**
* 浠诲姟涓嬪彂
*/
- private void taskTakeIssued() {
+ private void taskIssued() {
while (true) {
try {
// 浼戠湢 1 绉�
@@ -108,24 +148,28 @@
continue;
}
RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
- if (rgvProtocol == null) {
+ RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+ if (rgvProtocol == null || rgvTaskProtocol == null) {
initRgv();
rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+ rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
}
- if (rgvProtocol.getAvoid() == 0 || !rgvProtocol.getLoaded().equals((short) 0)) {
+ if (rgvTaskProtocol.getAvoid() != 0) {
continue;
}
- List<TaskProtocol> allTakeTaskProtocol = taskProtocolCache.getAllTakeTaskProtocol();
+
+ List<TaskProtocol> allTakeTaskProtocol = taskProtocolCache.getTakeOrPutTaskProtocol(rgvProtocol.getLoaded());
for(TaskProtocol taskProtocol: allTakeTaskProtocol){
- if (taskProtocol.getTaskStatus() == 1){//鍑嗗涓嬪彂
-
-
-
-
-
-
-
-
+ if (taskProtocol.getIsRunning() == 1){//鍑嗗涓嬪彂
+ RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+ //鍙岃溅
+ if (rgvOtherStatusEnable()){
+ //鍙︿竴鍙拌溅鏄惁鍏佽姝ゅ彴杞︽墽琛�
+ if (!otherRgvAvoid(taskProtocol.getTargetPosition())){
+ continue;
+ }
+ }
+ Thread.sleep(200);
TaskProtocol issued = new TaskProtocol(taskProtocol);
write(issued);
taskProtocol.setIsRunning(taskProtocol.getIsRunning() +1);
@@ -133,8 +177,6 @@
break;
}
}
-
-
} catch (Exception e) {
log.error("RGV鍙栬揣浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�"+e.getMessage());
// e.printStackTrace();
@@ -144,56 +186,176 @@
public boolean deviceDetection(){
RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
- if (rgvProtocol == null) {
+ RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+
+ if (rgvProtocol == null || rgvTaskProtocol ==null) {
return false;
}
- if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L)
- || !rgvProtocol.getStatusType().equals(RgvStatusType.IDLE)) {
+ if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 || rgvProtocol.getRgvPosDestination() == 0L
+ || (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
return false;
}
RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+ RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
+
if (rgvProtocolOther == null) {
return false;
}
if (rgvProtocolOther.statusEnable){
- if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) {
+ if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1 || rgvProtocolOther.getRgvPosDestination() == 0L) {
return false;
}
}
return true;
}
- /**
- * 浠诲姟涓嬪彂
- */
- private void taskPutIssued() {
- while (true) {
- try {
- // 浼戠湢 1 绉�
- Thread.sleep(100);
-
- } catch (Exception e) {
- log.error("RGV鏀捐揣浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�"+e.getMessage());
-// e.printStackTrace();
- }
+ public boolean rgvOtherStatusEnable(){
+ RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+ if (rgvProtocolOther == null) {
+ return true;
}
+ if (rgvProtocolOther.statusEnable){
+// if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) {
+ return true;
+// }
+ }
+ return false;
}
- /**
- * 浠诲姟涓嬪彂
- */
- private void taskWalkIssued() {
- while (true) {
- try {
- // 浼戠湢 1 绉�
- Thread.sleep(100);
+ public boolean otherRgvAvoid(Long targetPosition){
+ RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+ RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+ RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
- } catch (Exception e) {
- log.error("RGV琛岃蛋浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�"+e.getMessage());
-// e.printStackTrace();
+ if (rgvProtocol.getRgvPos()<rgvProtocolOther.getRgvPos()){
+ if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)){
+ if ((rgvProtocolOther.getRgvPos()-rgvProtocolOther.getCarBodyJiaoMing())
+ - (targetPosition+rgvProtocol.getCarBodyKunPeng())
+ > avoidDistance){//鏃犻渶閬胯
+ return true;
+ } else {
+ long avoid = targetPosition + rgvProtocol.getCarBodyKunPeng() + avoidDistance + rgvProtocolOther.getCarBodyJiaoMing();
+ if (avoid > trackEntireLength-rgvProtocolOther.getCarBodyKunPeng()){
+ log.error("閬胯瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒");
+ return false;
+ }
+ rgvTaskProtocol.setAvoid(1);
+ rgvTaskProtocol.setAvoidingTheDestination(avoid);
+ RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+ return true;
+ }
+ } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.ROAM)){
+ if ((rgvProtocolOther.getRgvPosDestination()-rgvProtocolOther.getCarBodyJiaoMing())
+ - (targetPosition+rgvProtocol.getCarBodyKunPeng())
+ > avoidDistance){//鏃犻渶閬胯
+ return true;
+ } else {
+ long avoid = targetPosition + rgvProtocol.getCarBodyKunPeng() + avoidDistance + rgvProtocolOther.getCarBodyJiaoMing();
+ if (avoid > trackEntireLength-rgvProtocolOther.getCarBodyKunPeng()){
+ log.error("閬胯瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒");
+ return false;
+ }
+ rgvTaskProtocol.setAvoid(1);
+ rgvTaskProtocol.setAvoidingTheDestination(avoid);
+ RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+ return true;
+ }
+ } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)){
+ if ((rgvProtocolOther.getRgvPosDestination()-rgvProtocolOther.getCarBodyJiaoMing())
+ - (targetPosition+rgvProtocol.getCarBodyKunPeng())
+ > avoidDistance){//鏃犻渶閬胯
+ return true;
+ } else {
+ RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvProtocolOther.getRgvNo());
+ TaskProtocolCache taskProtocolCacheOther = rgvThreadOther.getTaskProtocolCache();
+ List<TaskProtocol> allPutTaskProtocol = taskProtocolCacheOther.getAllPutTaskProtocol();
+ if (allPutTaskProtocol.size() > 1){
+ return false;
+ }
+ for (TaskProtocol taskProtocol : allPutTaskProtocol){
+ if (taskProtocol.getTargetPosition()>=rgvProtocolOther.getRgvPos()){
+ long avoid = rgvProtocolOther.getRgvPos()-rgvProtocolOther.getCarBodyJiaoMing()-avoidDistance-rgvProtocol.getCarBodyKunPeng();
+ if (avoid > trackEntireLength-rgvProtocolOther.getCarBodyKunPeng()){
+ log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒");
+ return false;
+ }
+ rgvTaskProtocol.setAvoid(1);
+ rgvTaskProtocol.setAvoidingTheDestination(avoid);
+ RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return false;
+ }
+ }
+ } else {
+ if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)){
+ if ((targetPosition-rgvProtocol.getCarBodyJiaoMing())
+ - (rgvProtocolOther.getRgvPos()+rgvProtocolOther.getCarBodyKunPeng())
+ > avoidDistance){//鏃犻渶閬胯
+ return true;
+ } else {
+ long avoid = targetPosition -rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng();
+ if (avoid < trackBenchmark + rgvProtocolOther.getCarBodyJiaoMing()){
+ log.error("閬胯瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒");
+ return false;
+ }
+ rgvTaskProtocol.setAvoid(1);
+ rgvTaskProtocol.setAvoidingTheDestination(avoid);
+ RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+ return true;
+ }
+ } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.ROAM)){
+ if ((targetPosition-rgvProtocol.getCarBodyJiaoMing())
+ - (rgvProtocolOther.getRgvPosDestination()+rgvProtocolOther.getCarBodyKunPeng())
+ > avoidDistance){//鏃犻渶閬胯
+ return true;
+ } else {
+ long avoid = targetPosition -rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng();
+ if (avoid < trackBenchmark + rgvProtocolOther.getCarBodyJiaoMing()){
+ log.error("閬胯瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒");
+ return false;
+ }
+ rgvTaskProtocol.setAvoid(1);
+ rgvTaskProtocol.setAvoidingTheDestination(avoid);
+ RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+ return true;
+ }
+ } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)){
+ if ((targetPosition-rgvProtocol.getCarBodyJiaoMing())
+ - (rgvProtocolOther.getRgvPosDestination()+rgvProtocolOther.getCarBodyKunPeng())
+ > avoidDistance){//鏃犻渶閬胯
+ return true;
+ } else {
+ RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvProtocolOther.getRgvNo());
+ TaskProtocolCache taskProtocolCacheOther = rgvThreadOther.getTaskProtocolCache();
+ List<TaskProtocol> allPutTaskProtocol = taskProtocolCacheOther.getAllPutTaskProtocol();
+ if (allPutTaskProtocol.size() > 1){
+ return false;
+ }
+ for (TaskProtocol taskProtocol : allPutTaskProtocol){
+ if (taskProtocol.getTargetPosition()<=rgvProtocolOther.getRgvPos()){
+ long avoid = rgvProtocolOther.getRgvPos()+rgvProtocolOther.getCarBodyKunPeng()+avoidDistance+rgvProtocol.getCarBodyJiaoMing();
+ if (avoid < trackBenchmark + rgvProtocolOther.getCarBodyJiaoMing()){
+ log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯� 鑱旂郴绠$悊鍛橈紒锛侊紒");
+ return false;
+ }
+ rgvTaskProtocol.setAvoid(1);
+ rgvTaskProtocol.setAvoidingTheDestination(avoid);
+ RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return false;
+ }
}
}
+ return false;
}
/**
@@ -213,14 +375,32 @@
rgvProtocol.setxSpeed((short) 0);
rgvProtocol.setxDistance((short) 0);
rgvProtocol.setxDuration((short) 0);
- BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class);
- BasRgv rgv = basRgvService.selectById(slave.getId());
- if (!Cools.isEmpty(rgv)){
- rgvProtocol.setStatusEnable(rgv.getStatus() == 1);
- } else {
- rgvProtocol.setStatusEnable(false);
+ rgvProtocol.setCarBodyJiaoMing(0L);
+ rgvProtocol.setCarBodyKunPeng(0L);
+ try{
+ BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class);
+ BasRgv rgv = basRgvService.selectById(slave.getId());
+ if (!Cools.isEmpty(rgv)){
+ rgvProtocol.setStatusEnable(rgv.getStatus() == 1);
+ } else {
+ rgvProtocol.setStatusEnable(false);
+ }
+ } catch (Exception e){
+ log.error("RGV寮傚父锛侊紒锛�"+e.getMessage());
+ rgvProtocol.setStatusEnable(true);
}
+
+ RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+ if (rgvTaskProtocol == null) {
+ rgvTaskProtocol = new RgvTaskProtocol();
+ rgvTaskProtocol.setRgvNo(slave.getId());
+ }
+ rgvTaskProtocol.setAvoid(-1);
+ rgvTaskProtocol.setAvoidingTheDestination(0L);
+
RgvStatusCache.updateRgvStatus(rgvProtocol);
+
+ RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
}
@@ -233,13 +413,14 @@
OperateResult connect = siemensNet.ConnectServer();
if(connect.IsSuccess){
result = true;
- OutputQueue.RGV.offer(MessageFormat.format( "銆恵0}銆慠GV plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+// OutputQueue.RGV.offer(MessageFormat.format( "銆恵0}銆慠GV plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
log.info("RGV plc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
} else {
- OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慠GV plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+// OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慠GV plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
log.error("RGV plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
- initRgv();
+
}
+ initRgv();
// siemensNet.ConnectClose();
return result;
}
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 9c3e97c..3c1c0eb 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -40,6 +40,8 @@
rack: 0
slot: 0
otherId: 2
+ carBodyJiaoMing: 100
+ carBodyKunPeng: 100
#RGV婧愮珯鐐�
rgvInSStn[0]:
devpPlcId: ${wcs-slave.devp[0].id}
@@ -50,11 +52,13 @@
# RGV绌挎杞�2
rgv[1]:
id: 2
- ip: 192.168.4.250
+ ip: 192.168.1.1
port: 502
rack: 0
slot: 0
otherId: 1
+ carBodyJiaoMing: 100
+ carBodyKunPeng: 100
#RGV婧愮珯鐐�
rgvInSStn[0]:
devpPlcId: ${wcs-slave.devp[0].id}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index f9320e0..afc15d7 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -54,6 +54,8 @@
trackBenchmark: 1
# 杞ㄩ亾杞崲涓虹背姣斾緥
trackProportion: 10000
+ # 閬胯璺濈
+ avoidDistance: 100
wms:
# 鏄惁寮�鍚笂鎶�
diff --git a/src/main/resources/mapper/BasDevpPositionMapper.xml b/src/main/resources/mapper/BasDevpPositionMapper.xml
new file mode 100644
index 0000000..2d4b554
--- /dev/null
+++ b/src/main/resources/mapper/BasDevpPositionMapper.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.BasDevpPositionMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasDevpPosition">
+ <id column="ID" property="id" />
+ <result column="DEV_NO" property="devNo" />
+ <result column="PLC_ID" property="plcId" />
+ <result column="PLC_POSITION" property="plcPosition" />
+
+ </resultMap>
+
+</mapper>
--
Gitblit v1.9.1