#ZH
野心家
2025-05-27 b791daa70e38b4e426d2b065da5bd317fe8c91f3
#ZH
3个文件已修改
2个文件已添加
194 ■■■■■ 已修改文件
src/main/java/com/zy/core/cache/RgvRunCache.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/RgvRunProtocol.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/RgvTaskProtocol.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/RgvThread.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/cache/RgvRunCache.java
New file
@@ -0,0 +1,60 @@
package com.zy.core.cache;
import com.core.common.Cools;
import com.zy.core.model.protocol.RgvRunProtocol;
import com.zy.core.model.protocol.RgvTaskProtocol;
import java.util.concurrent.ConcurrentHashMap;
/**
 * Created by IX on 2025/02/21
 */
public class RgvRunCache {
    // 本地缓存,键为 currentPosition,值为 DeviceStatus
    private static final ConcurrentHashMap<String, RgvRunProtocol> cache = new ConcurrentHashMap<>();
    /**
     * 更新设备状态
     */
    public static void updateRgvStatus(RgvRunProtocol status) {
        try {
            cache.put(status.getDev(), status);
        } finally {
        }
    }
    /**
     * 获取设备状态
     */
    public static RgvRunProtocol getRgvRun() {
        try {
            RgvRunProtocol rgv = cache.get("RGV");
            if (Cools.isEmpty(rgv)){
                rgv = new RgvRunProtocol();
            }
            return rgv;
        } finally {
        }
    }
    /**
     * 获取设备状态
     */
    public static RgvRunProtocol getRgvStatus(String dev) {
        try {
            return cache.get(dev);
        } finally {
        }
    }
    /**
     * 获取所有设备状态
     */
    public static ConcurrentHashMap<String, RgvRunProtocol> getAllRgvStatus() {
        try {
            return new ConcurrentHashMap<>(cache); // 返回副本
        } finally {
        }
    }
}
src/main/java/com/zy/core/model/protocol/RgvRunProtocol.java
New file
@@ -0,0 +1,18 @@
package com.zy.core.model.protocol;
import lombok.Data;
/**
 * Created by IX on 2025/02/21
 */
@Data
public class RgvRunProtocol {
    private String dev = "RGV";
    private Integer RgvNo = 1;
    public Long currentTimeMilliOld = 0L;
    public RgvRunProtocol(){}
}
src/main/java/com/zy/core/model/protocol/RgvTaskProtocol.java
@@ -21,7 +21,5 @@
     */
    public Long AvoidingTheDestination;
    public boolean signRun = true;
    public RgvTaskProtocol(){}
}
src/main/java/com/zy/core/thread/RgvThread.java
@@ -25,10 +25,7 @@
import com.zy.core.model.RgvSlave;
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.StaProtocol;
import com.zy.core.model.protocol.TaskProtocol;
import com.zy.core.model.protocol.*;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@@ -56,7 +53,6 @@
    private Long trackBenchmark = 1L;
    //  # 避让距离
    private Long avoidDistance = 5000L;
    private Long currentTimeMilliOld = 0L;
    /**
     * 工位1复位信号
@@ -292,19 +288,25 @@
     */
    private void taskIssued() {
        while (true) {
            RgvRunProtocol rgvRun = RgvRunCache.getRgvRun();
            if (!rgvRun.getRgvNo().equals(slave.getId())){
                continue;
            }
            try {
                Thread.sleep(50);
                rgvRun = RgvRunCache.getRgvRun();
                System.out.println(JSON.toJSON(rgvRun));
                // 休眠 1 秒
                if (System.currentTimeMillis() - currentTimeMilliOld > 100) {
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                if (System.currentTimeMillis() - rgvRun.currentTimeMilliOld > 1500) {
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                } else {
                    continue;
                }
                if (!deviceDetection()) {
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                    continue;
                }
                if (!signRunStart()){
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.setRgvNo(slave.getOtherId());
                    RgvRunCache.updateRgvStatus(rgvRun);
                    continue;
                }
@@ -316,13 +318,15 @@
                    rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
                }
                if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)){
                    signRunEnd();
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.setRgvNo(slave.getOtherId());
                    RgvRunCache.updateRgvStatus(rgvRun);
                    continue;
                }
                if (rgvProtocol.getLoaded() == -1){
                    signRunEnd();
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.setRgvNo(slave.getOtherId());
                    RgvRunCache.updateRgvStatus(rgvRun);
                    continue;
                }
                if (rgvTaskProtocol.getAvoid() != 0) {
@@ -339,8 +343,9 @@
                        RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
                    }
                    signRunEnd();
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.setRgvNo(slave.getOtherId());
                    RgvRunCache.updateRgvStatus(rgvRun);
                    continue;
                }
@@ -384,12 +389,12 @@
                                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, taskProtocol.getTargetPositionStaNoPlcId());
                                    StaProtocol staProtocol = devpThread.getStation().get(taskProtocol.getTargetPositionStaNo());
                                    if (staProtocol == null ) {
                                        continue;
                                        break;
                                    }
                                    // 判断是否满足入库条件
                                    if (!staProtocol.isAutoing() || staProtocol.isLoading()
                                    ){
                                        continue;
                                        break;
                                    }
                                }
                                TaskProtocol issued = new TaskProtocol(taskProtocol);
@@ -404,8 +409,9 @@
                        }
                    }
                }
                signRunEnd();
                currentTimeMilliOld = System.currentTimeMillis()+50;
                rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                rgvRun.setRgvNo(slave.getOtherId());
                RgvRunCache.updateRgvStatus(rgvRun);
            } catch (Exception e) {
                log.error("RGV任务下发线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                try{
@@ -414,6 +420,11 @@
                } catch (Exception e2){
                    log.error("e2:"+e2.getMessage());
                }
                rgvRun = RgvRunCache.getRgvRun();
                rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                rgvRun.setRgvNo(slave.getOtherId());
                RgvRunCache.updateRgvStatus(rgvRun);
                continue;
//                e.printStackTrace();
            }
        }
@@ -437,54 +448,6 @@
        return true;
    }
    public boolean signRunStart() {
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
        if (rgvTaskProtocol == null) {
            return false;
        }
        RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
        if (rgvTaskProtocolOther == null) {
            return false;
        }
        if(!rgvTaskProtocol.isSignRun()) {
            return false;
        }
        if(rgvTaskProtocolOther.isSignRun()) {
            rgvTaskProtocol.setSignRun(rgvTaskProtocol.getRgvNo()==1);
            RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
            return false;
        }
        rgvTaskProtocol.setSignRun(false);
        RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
        return true;
    }
    public boolean signRunEnd() {
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
        if (rgvTaskProtocol == null) {
            return false;
        }
        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
        if (rgvProtocolOther == null) {
            return false;
        }
        if (rgvProtocolOther.statusEnable) {
            RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
            if (rgvTaskProtocolOther == null) {
                return false;
            }
            rgvTaskProtocol.setSignRun(false);
            RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
            rgvTaskProtocolOther.setSignRun(true);
            RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther);
        } else {
            rgvTaskProtocol.setSignRun(true);
            RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
        }
        return true;
    }
    public boolean deviceDetection() {
        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
@@ -495,9 +458,6 @@
        }
        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 || rgvProtocol.getRgvPosDestination() == 0L
                || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
            if (signRunStart()){
                signRunEnd();
            }
            return false;
        }
        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
@@ -510,9 +470,6 @@
        }
        if (rgvProtocolOther.statusEnable) {
            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1 || rgvProtocolOther.getRgvPosDestination() == 0L) {
                if (signRunStart()){
                    signRunEnd();
                }
                return false;
            }
        }
@@ -916,6 +873,7 @@
                if (rgvProtocol.getRgvPosDestination()==0L){
                    rgvProtocol.setRgvPosDestination(rgvProtocol.getRgvPos());
                }
                rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 8));
                rgvProtocol.setTaskNo((long)siemensNet.getByteTransform().TransInt32(result.Content, 10));
src/main/resources/application.yml
@@ -71,8 +71,8 @@
  #url: 10.32.53.195:8080
  # WMS系统ip
  #  url: 10.210.157.109:8090
  url: 27.172.1.135:20006
#  url: 27.172.2.104:9027
#  url: 27.172.1.135:20006
  url: 27.172.2.104:9027
  # 入库任务申请接口
  #inboundTaskApplyPath: api/InterFace/inboundTaskApply
  inboundTaskApplyPath: xf-management/api/external/wcs/inboundTaskApply