#ZH
野心家
2025-05-26 97cfc84c932f52c6419eebfd4888f2d8212edb5b
src/main/java/com/zy/core/thread/RgvThread.java
@@ -56,6 +56,7 @@
    private Long trackBenchmark = 1L;
    //  # 避让距离
    private Long avoidDistance = 5000L;
    private Long currentTimeMilliOld = 0L;
    /**
     * 工位1复位信号
@@ -132,6 +133,7 @@
        while (true) {
            try {
                Thread.sleep(20);
                System.out.println("读线程"+ slave.getId());
                readStatus();
@@ -187,103 +189,103 @@
    /**
     * 任务下发
     */
    private void taskWalkIssued2() {
        while (true) {
            try {
                // 休眠 1 秒
                Thread.sleep(100);
                if (!deviceDetection()) {
                    continue;
                }
                RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
                RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
                if (rgvProtocol == null || rgvTaskProtocol == null) {
                    initRgv();
                    rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
                    rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
                }
                if (rgvTaskProtocol.getAvoid() != 0) {
                    continue;
                }
                if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE)){
                    continue;
                }
                if (rgvProtocol.getLoaded() == -1){
                    continue;
                }
                List<TaskProtocol> allTakeTaskProtocol = taskProtocolCache.getAllWalkTaskProtocol();
                for (TaskProtocol taskProtocol : allTakeTaskProtocol) {
                    if (taskProtocol.getIsRunning() == 1) {//准备下发
                        // 双车
                        if (rgvOtherStatusEnable()) {
                            //另一台车是否允许此台车执行
                            if (!otherRgvAvoid(taskProtocol.getTargetPosition())) {
                                continue;
                            }
                        }
                        if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50
                                && taskProtocol.getTargetPosition()>=rgvProtocol.getRgvPos()-50){
                            taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection());
                            break;
                        } else {
                            TaskProtocol issued = new TaskProtocol(taskProtocol,true);
                            write(issued);
                            taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection());
                            break;
                        }
                    }
                }
            } catch (Exception e) {
                log.error("RGV任务下发线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                try{
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV任务下发线程异常"+e.getMessage());
                } catch (Exception e2){
                    log.error("e2:"+e2.getMessage());
                }
//                e.printStackTrace();
            }
        }
    }
//    private void taskWalkIssued2() {
//        while (true) {
//            try {
//                // 休眠 1 秒
//                Thread.sleep(100);
//                if (!deviceDetection()) {
//                    continue;
//                }
//                RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
//                RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
//                if (rgvProtocol == null || rgvTaskProtocol == null) {
//                    initRgv();
//                    rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
//                    rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
//                }
//                if (rgvTaskProtocol.getAvoid() != 0) {
//                    continue;
//                }
//                if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE)){
//                    continue;
//                }
//                if (rgvProtocol.getLoaded() == -1){
//                    continue;
//                }
//
//                List<TaskProtocol> allTakeTaskProtocol = taskProtocolCache.getAllWalkTaskProtocol();
//                for (TaskProtocol taskProtocol : allTakeTaskProtocol) {
//                    if (taskProtocol.getIsRunning() == 1) {//准备下发
//                        // 双车
//                        if (rgvOtherStatusEnable()) {
//                            //另一台车是否允许此台车执行
//                            if (!otherRgvAvoid(taskProtocol.getTargetPosition())) {
//                                continue;
//                            }
//                        }
//                        if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50
//                                && taskProtocol.getTargetPosition()>=rgvProtocol.getRgvPos()-50){
//                            taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection());
//                            break;
//                        } else {
//                            TaskProtocol issued = new TaskProtocol(taskProtocol,true);
//                            write(issued);
//                            taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection());
//                            break;
//                        }
//                    }
//                }
//            } catch (Exception e) {
//                log.error("RGV任务下发线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
//                try{
//                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
//                    deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV任务下发线程异常"+e.getMessage());
//                } catch (Exception e2){
//                    log.error("e2:"+e2.getMessage());
//                }
////                e.printStackTrace();
//            }
//        }
//    }
    /**
     * 漫游
     */
    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());
                issued.setTaskStatus(1);
                issued.setDirection(true);
                write(issued);
                rgvTaskProtocol.setAvoid(0);
                Thread.sleep(200);
                RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
            } catch (Exception e) {
                log.error("RGV行走任务下发线程异常!!!" + e.getMessage());
//                e.printStackTrace();
            }
        }
    }
//    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());
//                issued.setTaskStatus(1);
//                issued.setDirection(true);
//                write(issued);
//                rgvTaskProtocol.setAvoid(0);
//
//                Thread.sleep(200);
//                RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
//
//            } catch (Exception e) {
//                log.error("RGV行走任务下发线程异常!!!" + e.getMessage());
////                e.printStackTrace();
//            }
//        }
//    }
    /**
     * 任务下发
@@ -292,10 +294,20 @@
        while (true) {
            try {
                // 休眠 1 秒
                Thread.sleep(100);
                if (!deviceDetection()) {
                if (System.currentTimeMillis() - currentTimeMilliOld > 100) {
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                } else {
                    continue;
                }
                if (!deviceDetection()) {
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                    continue;
                }
                if (!signRunStart()){
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                    continue;
                }
                RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
                RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
                if (rgvProtocol == null || rgvTaskProtocol == null) {
@@ -303,10 +315,14 @@
                    rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
                    rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
                }
                if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE)){
                if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)){
                    signRunEnd();
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                    continue;
                }
                if (rgvProtocol.getLoaded() == -1){
                    signRunEnd();
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                    continue;
                }
                if (rgvTaskProtocol.getAvoid() != 0) {
@@ -319,9 +335,12 @@
                        write(issued);
                        rgvTaskProtocol.setAvoid(0);
                        Thread.sleep(200);
//                        try{Thread.sleep(50L);} catch (Exception e){}
                        RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
                    }
                    signRunEnd();
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                    continue;
                }
@@ -334,7 +353,7 @@
                            if (rgvOtherStatusEnable()) {
                                //另一台车是否允许此台车执行
                                if (!otherRgvAvoid(taskProtocol.getTargetPosition())) {
                                    continue;
                                    break;
                                }
                            }
                            if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50
@@ -352,27 +371,11 @@
                } else {
                    for (TaskProtocol taskProtocol : allTakeTaskProtocol) {
                        if (taskProtocol.getIsRunning() == 1) {//准备下发
//                        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
                            if (taskProtocol.getTaskStatus()==3){
                                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, taskProtocol.getTargetPositionStaNoPlcId());
                                StaProtocol staProtocol = devpThread.getStation().get(taskProtocol.getTargetPositionStaNo());
                                if (staProtocol == null ) {
                                    continue;
                                }
                                // 判断是否满足入库条件
                                if (!staProtocol.isAutoing() || staProtocol.isLoading()
                                        || staProtocol.getWorkNo() != 0
                                ){
                                    Thread.sleep(500);
//                                    System.out.println("<放货目标站>" + taskProtocol.getTargetPositionStaNo() + "<非自动或者有物或者存在工作号!!!>");
//                                continue;
                                }
                            }
                            //双车
                            if (rgvOtherStatusEnable()) {
                                //另一台车是否允许此台车执行
                                if (!otherRgvAvoid(taskProtocol.getTargetPosition())) {
                                    continue;
                                    break;
                                }
                            }
                            if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50
@@ -385,10 +388,7 @@
                                    }
                                    // 判断是否满足入库条件
                                    if (!staProtocol.isAutoing() || staProtocol.isLoading()
                                            || staProtocol.getWorkNo() != 0
                                    ){
                                        Thread.sleep(500);
//                                    System.out.println("<放货目标站>" + taskProtocol.getTargetPositionStaNo() + "<非自动或者有物或者存在工作号!!!>");
                                        continue;
                                    }
                                }
@@ -404,6 +404,8 @@
                        }
                    }
                }
                signRunEnd();
                currentTimeMilliOld = System.currentTimeMillis()+50;
            } catch (Exception e) {
                log.error("RGV任务下发线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                try{
@@ -416,16 +418,9 @@
            }
        }
    }
    public boolean deviceDetection() {
        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
    public boolean isSignRgvTaskProtocol() {
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
        if (rgvProtocol == null || rgvTaskProtocol == null) {
            return false;
        }
        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))) {
        if (rgvTaskProtocol == null) {
            return false;
        }
        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
@@ -435,7 +430,89 @@
            return false;
        }
        if (rgvProtocolOther.statusEnable) {
            if (rgvTaskProtocolOther == null) {
                return false;
            }
        }
        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());
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
        if (rgvProtocol == null || rgvTaskProtocol == null) {
            return false;
        }
        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());
        RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
//        System.out.println("rgvTaskProtocol:"+slave.getId()+"sign:"+rgvTaskProtocol.isSignRun()+"/n"+
//                "rgvTaskProtocolOther:"+slave.getOtherId()+"sign:"+rgvTaskProtocolOther.isSignRun()+"/n");
        if (rgvProtocolOther == null) {
            return false;
        }
        if (rgvProtocolOther.statusEnable) {
            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1 || rgvProtocolOther.getRgvPosDestination() == 0L) {
                if (signRunStart()){
                    signRunEnd();
                }
                return false;
            }
        }
@@ -464,13 +541,59 @@
        Long[][] avoidRange = new TrackRangeUtils().avoidRange(slave, trackEntireLength, trackBenchmark, avoidDistance);
        if (new TrackRangeUtils().IsItSmall(slave)) {
            if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)) {
            if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE) && (Math.abs(rgvProtocolOther.getRgvPos() - rgvProtocolOther.getRgvPosDestination())<50)) {
                if ((rgvProtocolOther.getRgvPos() - rgvProtocolOther.getCarBodyJiaoMing())
                        - (targetPosition + rgvProtocol.getCarBodyKunPeng())
                        > avoidDistance - 50) {//无需避让
                    return true;
                } else {
                    RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getOtherId());
                    TaskProtocolCache taskProtocolCacheOther = rgvThreadOther.getTaskProtocolCache();
                    TaskProtocol nowPosRunTask = taskProtocolCacheOther.getNowPosRunTask(rgvProtocolOther.getRgvPos());
                    if (!Cools.isEmpty(nowPosRunTask)){
                        boolean signNowPosRun = true;
                        if (nowPosRunTask.getTaskStatus()==3){
                            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, nowPosRunTask.getTargetPositionStaNoPlcId());
                            StaProtocol staProtocol = devpThread.getStation().get(nowPosRunTask.getTargetPositionStaNo());
                            if (staProtocol == null ) {
                                signNowPosRun =false;
                            }
                            if (signNowPosRun){
                                // 判断是否满足入库条件
                                if (!staProtocol.isAutoing() || staProtocol.isLoading()
                                ){
                                    if (targetPosition.equals(nowPosRunTask.getTargetPosition())){
                                        if (rgvProtocolOther.getRgvPosDestination() >= rgvProtocolOther.getRgvPos()-50) {
                                            long avoid = rgvProtocolOther.getRgvPos() - rgvProtocolOther.getCarBodyJiaoMing() - avoidDistance - rgvProtocol.getCarBodyKunPeng();
                                            if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) {
                                                log.error("RGV行走超出范围!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                                                try{
                                                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                                                    deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                                                } catch (Exception e2){
                                                    log.error("e2:"+e2.getMessage());
                                                }
                                                return false;
                                            }
                                            long avoidAbs = Math.abs(avoid - rgvProtocol.getRgvPos());
                                            if (avoidAbs<51){
                                                return false;
                                            }
                                            rgvTaskProtocol.setAvoid(1);
                                            rgvTaskProtocol.setAvoidingTheDestination(avoid);
                                            RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
                                        }
                                        return false;
                                    }
                                    signNowPosRun =false;
                                }
                            }
                        }
                        if (signNowPosRun){
                            return false;
                        }
                    }
                    long avoid = targetPosition + rgvProtocol.getCarBodyKunPeng() + avoidDistance + rgvProtocolOther.getCarBodyJiaoMing();
                    if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) {
                        log.error("RGV行走超出范围!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
@@ -554,12 +677,58 @@
                }
            }
        } else {
            if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)) {
            if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)  && (Math.abs(rgvProtocolOther.getRgvPos() - rgvProtocolOther.getRgvPosDestination())<50)) {
                if ((targetPosition - rgvProtocol.getCarBodyJiaoMing())
                        - (rgvProtocolOther.getRgvPos() + rgvProtocolOther.getCarBodyKunPeng())
                        > avoidDistance - 50) {//无需避让
                    return true;
                } else {
                    RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getOtherId());
                    TaskProtocolCache taskProtocolCacheOther = rgvThreadOther.getTaskProtocolCache();
                    TaskProtocol nowPosRunTask = taskProtocolCacheOther.getNowPosRunTask(rgvProtocolOther.getRgvPos());
                    if (!Cools.isEmpty(nowPosRunTask)){
                        boolean signNowPosRun = true;
                        if (nowPosRunTask.getTaskStatus()==3){
                            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, nowPosRunTask.getTargetPositionStaNoPlcId());
                            StaProtocol staProtocol = devpThread.getStation().get(nowPosRunTask.getTargetPositionStaNo());
                            if (staProtocol == null ) {
                                signNowPosRun =false;
                            }
                            if (signNowPosRun){
                                // 判断是否满足入库条件
                                if (!staProtocol.isAutoing() || staProtocol.isLoading()
                                ){
                                    if (targetPosition.equals(nowPosRunTask.getTargetPosition())){
                                        if (rgvProtocolOther.getRgvPosDestination() <= rgvProtocolOther.getRgvPos() + 50) {
                                            long avoid = rgvProtocolOther.getRgvPos() + rgvProtocolOther.getCarBodyKunPeng() + avoidDistance + rgvProtocol.getCarBodyJiaoMing();
                                            if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) {
                                                log.error("RGV行走超出范围!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                                                try{
                                                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                                                    deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                                                } catch (Exception e2){
                                                    log.error("e2:"+e2.getMessage());
                                                }
                                                return false;
                                            }
                                            long avoidAbs = Math.abs(avoid - rgvProtocol.getRgvPos());
                                            if (avoidAbs<51){
                                                return false;
                                            }
                                            rgvTaskProtocol.setAvoid(1);
                                            rgvTaskProtocol.setAvoidingTheDestination(avoid);
                                            RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
                                        }
                                        return false;
                                    }
                                    signNowPosRun =false;
                                }
                            }
                        }
                        if (signNowPosRun){
                            return false;
                        }
                    }
                    long avoid = targetPosition - rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng();
                    if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) {
                        log.error("RGV行走超出范围!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
@@ -766,6 +935,7 @@
                rgvProtocol.setErr4(status[11]);
                rgvProtocol.setErr5(status[12]);
                rgvProtocol.setErr6(status[13]);
                System.out.println("读线程"+ slave.getId()+"---"+JSON.toJSONString(rgvProtocol));
                OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), slave.getId()));
//                // 工位1复位信号
@@ -899,8 +1069,8 @@
        }
        if (result != null && result.IsSuccess) {
            Thread.sleep(200);
            this.readStatus();
//            Thread.sleep(50);
//            this.readStatus();
            log.info("RGV 命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(taskProtocol));
            log.error("RGV 命令下发 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
@@ -949,8 +1119,8 @@
        }
        if (result != null && result.IsSuccess) {
            Thread.sleep(200);
            this.readStatus();
//            Thread.sleep(200);
//            this.readStatus();
            log.info("RGV 命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON("null"));
            OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON("null")));
            return true;