*
lsh
5 天以前 c99cbe6c0064deee3e57f1a751ff0717290ac621
src/main/java/com/zy/core/thread/RgvThread.java
@@ -94,7 +94,7 @@
        new Thread(this::taskIssued).start();
        // 启动漫游线程
//        new Thread(this::taskWalkIssued).start();
        new Thread(this::taskWalkIssued).start();
//        new Thread(this::taskWalkIssued2).start();
        // 启动任务完成线程
@@ -104,6 +104,7 @@
    private void rgvConnect() {
        while (true) {
            try {
                Thread.sleep(1000);
                if(!connectRgv){
                    try {
                        connectRgv = this.connect();
@@ -118,7 +119,7 @@
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgv", slave.getId(), "rgv连接失败"+e.getMessage());
                } catch (Exception e2){
                    log.error("e2:"+e2.getMessage());
//                    log.error("e2:"+e2.getMessage());
                }
                initRgv();
//                e.printStackTrace();
@@ -129,6 +130,15 @@
    private void readStatusRgv() {
        while (true) {
            try {
                if(!connectRgv){
                    try {
                        Thread.sleep(1000L);
                    } catch (Exception e){
                    }
                    initRgv();
                    continue;
                }
                Thread.sleep(20);
//                System.out.println("读线程"+ slave.getId());
@@ -140,7 +150,7 @@
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV数据读取线程异常"+e.getMessage());
                } catch (Exception e2){
                    log.error("e2:"+e2.getMessage());
//                    log.error("e2:"+e2.getMessage());
                }
                initRgv();
//                e.printStackTrace();
@@ -156,6 +166,14 @@
    private void taskComplete() {
        while (true) {
            try {
                if(!connectRgv){
                    try {
                        Thread.sleep(1000L);
                    } catch (Exception e){
                    }
                    continue;
                }
                if (delRgvTask){
                    writeDelRgvTask();
                    delRgvTask = false;
@@ -173,7 +191,7 @@
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV数据任务下发复位线程异常"+e.getMessage());
                } catch (Exception e2){
                    log.error("e2:"+e2.getMessage());
//                    log.error("e2:"+e2.getMessage());
                }
                initRgv();
//                e.printStackTrace();
@@ -249,49 +267,64 @@
    /**
     * 漫游
     */
//    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 {
                if(!connectRgv){
                    try {
                        Thread.sleep(1000L);
                    } catch (Exception e){
                    }
                    continue;
                }
                // 休眠 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 taskIssued() {
        while (true) {
            if(!connectRgv){
                try {
                    Thread.sleep(1000L);
                } catch (Exception e){
                }
                continue;
            }
            RgvRunProtocol rgvRun = RgvRunCache.getRgvRun();
            if (!rgvRun.getRgvNo().equals(slave.getId())){
                continue;
            }
            try {
@@ -300,7 +333,7 @@
//                System.out.println(JSON.toJSON(rgvRun));
                // 休眠 1 秒
                if (System.currentTimeMillis() - rgvRun.currentTimeMilliOld > 500) {
                if (System.currentTimeMillis() - rgvRun.currentTimeMilliOld > 1000) {
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                } else {
                    continue;
@@ -309,7 +342,9 @@
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.setRgvNo(slave.getOtherId());
                    RgvRunCache.updateRgvStatus(rgvRun);
                    RgvErrCache.updateRgvErr(slave.getId(),errorRgv);
                    if (!errorRgv.equals("无")){
                        RgvErrCache.updateRgvErr(slave.getId(),errorRgv);
                    }
                    continue;
                }
@@ -334,20 +369,6 @@
                    continue;
                }
                if (rgvTaskProtocol.getAvoid() != 0) {
                    if (rgvTaskProtocol.getAvoid() == 1) {
                        TaskProtocol issued = new TaskProtocol();
                        issued.setTaskNo(32222L);
                        issued.setTargetPosition(rgvTaskProtocol.getAvoidingTheDestination());
                        issued.setTaskStatus(1);
                        issued.setDirection(true);
                        write(issued);
                        RgvErrCache.updateRgvErr(slave.getId());
                        rgvTaskProtocol.setAvoid(0);
//                        try{Thread.sleep(50L);} catch (Exception e){}
                        RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
                    }
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.setRgvNo(slave.getOtherId());
                    RgvRunCache.updateRgvStatus(rgvRun);
@@ -445,7 +466,7 @@
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV任务下发线程异常"+e.getMessage());
                } catch (Exception e2){
                    log.error("e2:"+e2.getMessage());
//                    log.error("e2:"+e2.getMessage());
                }
                rgvRun = RgvRunCache.getRgvRun();
                rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
@@ -495,7 +516,7 @@
            return false;
        }
        if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM)) {
            errorRgv = slave.getId()+"号小车非空闲";
            errorRgv = "无";
            return false;
        }
        if ( (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM)) {
@@ -535,6 +556,10 @@
    public boolean otherRgvAvoid(Long targetPosition) {
        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
        long onePos = Math.abs(targetPosition - rgvProtocol.getRgvPos());
        if (onePos<50){
            return true;
        }
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
@@ -574,7 +599,7 @@
                                                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                                                    deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                                                } catch (Exception e2){
                                                    log.error("e2:"+e2.getMessage());
//                                                    log.error("e2:"+e2.getMessage());
                                                }
                                                return false;
                                            }
@@ -597,6 +622,66 @@
                            return false;
                        }
                    }
                    TaskProtocol nowPosRunTask2 = taskProtocolCacheOther.getNowPosRunTask2();
                    if (!Cools.isEmpty(nowPosRunTask2)){
                        boolean signNowPosRun = true;
                        boolean signNowPosA = true;
                        if (targetPosition - rgvProtocol.getRgvPos()>0){
                            if (nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos()>0){
                                if (rgvProtocol.getRgvPos()>rgvProtocolOther.getRgvPos()){
                                    signNowPosA = false;
                                    signNowPosRun = false;
                                }
                            }
                        } else if (targetPosition - rgvProtocol.getRgvPos()<0){
                            if (nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos()<0){
                                if (rgvProtocol.getRgvPos()<rgvProtocolOther.getRgvPos()){
                                    signNowPosA = false;
                                    signNowPosRun = false;
                                }
                            }
                        }
                        if (signNowPosA){
                            if (nowPosRunTask2.getTaskStatus()==3){
                                long twoPos = Math.abs(nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos());
                                if (Math.abs(onePos - twoPos)>100){
                                    if (onePos-50>twoPos+50){
                                        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, nowPosRunTask2.getTargetPositionStaNoPlcId());
                                        StaProtocol staProtocol = devpThread.getStation().get(nowPosRunTask2.getTargetPositionStaNo());
                                        if (staProtocol == null ) {
                                            signNowPosRun =false;
                                        }
                                        if (signNowPosRun){
                                            // 判断是否满足入库条件
                                            if (staProtocol.isAutoing() && !staProtocol.isLoading()
                                            ){
                                                errorRgv = slave.getOtherId()+"号RGV等待作业...";
                                                return false;
                                            }
                                        }
                                        signNowPosRun =false;
                                    }
                                }
                            } else {
                                long twoPos = Math.abs(nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos());
                                if (twoPos<100){
                                    errorRgv = slave.getOtherId()+"号RGV等待作业...";
                                    return false;
                                }
                                if (Math.abs(onePos - twoPos)>100){
                                    if (onePos-50>twoPos+50){
                                        signNowPosRun =false;
                                    }
                                }
                            }
                        }
                        if (signNowPosRun){
                            errorRgv = slave.getOtherId()+"号RGV等待作业...";
                            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());
@@ -606,7 +691,7 @@
                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                            deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                        } catch (Exception e2){
                            log.error("e2:"+e2.getMessage());
//                            log.error("e2:"+e2.getMessage());
                        }
                        return false;
                    }
@@ -634,7 +719,7 @@
                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                            deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                        } catch (Exception e2){
                            log.error("e2:"+e2.getMessage());
//                            log.error("e2:"+e2.getMessage());
                        }
                        return false;
                    }
@@ -663,7 +748,7 @@
                                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                                deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                            } catch (Exception e2){
                                log.error("e2:"+e2.getMessage());
//                                log.error("e2:"+e2.getMessage());
                            }
                            return false;
                        }
@@ -720,7 +805,7 @@
                                                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                                                    deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                                                } catch (Exception e2){
                                                    log.error("e2:"+e2.getMessage());
//                                                    log.error("e2:"+e2.getMessage());
                                                }
                                                return false;
                                            }
@@ -743,6 +828,67 @@
                            return false;
                        }
                    }
                    TaskProtocol nowPosRunTask2 = taskProtocolCacheOther.getNowPosRunTask2();
                    if (!Cools.isEmpty(nowPosRunTask2)){
                        boolean signNowPosRun = true;
                        boolean signNowPosA = true;
                        if (targetPosition - rgvProtocol.getRgvPos()>0){
                            if (nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos()>0){
                                if (rgvProtocol.getRgvPos()>rgvProtocolOther.getRgvPos()){
                                    signNowPosA = false;
                                    signNowPosRun = false;
                                }
                            }
                        } else if (targetPosition - rgvProtocol.getRgvPos()<0){
                            if (nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos()<0){
                                if (rgvProtocol.getRgvPos()<rgvProtocolOther.getRgvPos()){
                                    signNowPosA = false;
                                    signNowPosRun = false;
                                }
                            }
                        }
                        if (signNowPosA){
                            if (nowPosRunTask2.getTaskStatus()==3){
                                long twoPos = Math.abs(nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos());
                                if (Math.abs(onePos - twoPos)>100){
                                    if (onePos-50>twoPos+50){
                                        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, nowPosRunTask2.getTargetPositionStaNoPlcId());
                                        StaProtocol staProtocol = devpThread.getStation().get(nowPosRunTask2.getTargetPositionStaNo());
                                        if (staProtocol == null ) {
                                            signNowPosRun =false;
                                        }
                                        if (signNowPosRun){
                                            // 判断是否满足入库条件
                                            if (staProtocol.isAutoing() && !staProtocol.isLoading()
                                            ){
                                                errorRgv = slave.getOtherId()+"号RGV等待作业...";
                                                return false;
                                            }
                                        }
                                        signNowPosRun =false;
                                    }
                                }
                            } else {
                                long twoPos = Math.abs(nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos());
                                if (twoPos<100){
                                    errorRgv = slave.getOtherId()+"号RGV等待作业...";
                                    return false;
                                }
                                if (Math.abs(onePos - twoPos)>100){
                                    if (onePos-50>twoPos+50){
                                        signNowPosRun =false;
                                    }
                                }
                            }
                        }
                        if (signNowPosRun){
                            errorRgv = slave.getOtherId()+"号RGV等待作业...";
                            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());
@@ -752,7 +898,7 @@
                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                            deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                        } catch (Exception e2){
                            log.error("e2:"+e2.getMessage());
//                            log.error("e2:"+e2.getMessage());
                        }
                        return false;
                    }
@@ -780,7 +926,7 @@
                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                            deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                        } catch (Exception e2){
                            log.error("e2:"+e2.getMessage());
//                            log.error("e2:"+e2.getMessage());
                        }
                        return false;
                    }
@@ -810,7 +956,7 @@
                                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                                deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                            } catch (Exception e2){
                                log.error("e2:"+e2.getMessage());
//                                log.error("e2:"+e2.getMessage());
                            }
                            return false;
                        }
@@ -872,7 +1018,7 @@
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV异常"+e.getMessage());
            } catch (Exception e2){
                log.error("e2:"+e2.getMessage());
//                log.error("e2:"+e2.getMessage());
            }
            rgvProtocol.setStatusEnable(true);
        }
@@ -910,7 +1056,7 @@
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.addDeviceError("rgv", slave.getId(), "RGVplc连接失败");
            } catch (Exception e2){
                log.error("e2:"+e2.getMessage());
//                log.error("e2:"+e2.getMessage());
            }
        }
        initRgv();
@@ -996,7 +1142,7 @@
                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                            deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV plc数据库更新失败");
                        } catch (Exception e2){
                            log.error("e2:"+e2.getMessage());
//                            log.error("e2:"+e2.getMessage());
                        }
                    }
                } catch (Exception ignore) {
@@ -1017,7 +1163,7 @@
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgv", slave.getId(), "读取RGV plc状态信息失败");
                } catch (Exception e2){
                    log.error("e2:"+e2.getMessage());
//                    log.error("e2:"+e2.getMessage());
                }
            }
        } catch (Exception e) {
@@ -1029,7 +1175,7 @@
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.addDeviceError("rgv", slave.getId(), "读取RGV plc状态信息失败");
            } catch (Exception e2){
                log.error("e2:"+e2.getMessage());
//                log.error("e2:"+e2.getMessage());
            }
            initRgv();
        }
@@ -1046,7 +1192,7 @@
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV写入命令为空");
            } catch (Exception e2){
                log.error("e2:"+e2.getMessage());
//                log.error("e2:"+e2.getMessage());
            }
            return false;
        }
@@ -1105,7 +1251,7 @@
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV 命令下发"+JSON.toJSON(taskProtocol));
            } catch (Exception e2){
                log.error("e2:"+e2.getMessage());
//                log.error("e2:"+e2.getMessage());
            }
            OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(taskProtocol)));
            return true;