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