cpT
2025-07-01 52a57d1a6cd61009304656db35e50d4b9dbbda03
src/main/java/com/zy/core/thread/RgvThread.java
@@ -65,6 +65,8 @@
    private boolean resetFlag2 = false;
    private boolean connectRgv = false;
    public Long currentTimeMilliConnectRgv= 0L;
    private boolean delRgvTask = false;
    private short wrkSign = 0;
@@ -75,6 +77,12 @@
    @Override
    @SuppressWarnings("InfiniteLoopStatement")
    public void run() {
        initRgv();
        try{
            Thread.sleep(2000);
        } catch (Exception e){
        }
        connectRgv = this.connect();
        while(!connectRgv){
            try {
@@ -118,7 +126,7 @@
                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());
                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "rgv连接失败"+e.getMessage());
                } catch (Exception e2){
//                    log.error("e2:"+e2.getMessage());
                }
@@ -149,7 +157,7 @@
                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());
                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV数据读取线程异常"+e.getMessage());
                } catch (Exception e2){
//                    log.error("e2:"+e2.getMessage());
                }
@@ -192,7 +200,7 @@
                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());
                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV数据任务下发复位线程异常"+e.getMessage());
                } catch (Exception e2){
//                    log.error("e2:"+e2.getMessage());
                }
@@ -258,7 +266,7 @@
//                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());
//                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV任务下发线程异常"+e.getMessage());
//                } catch (Exception e2){
//                    log.error("e2:"+e2.getMessage());
//                }
@@ -331,18 +339,18 @@
                continue;
            }
            try {
                Thread.sleep(50);
                Thread.sleep(100);
                rgvRun = RgvRunCache.getRgvRun();
//                System.out.println(JSON.toJSON(rgvRun));
                // 休眠 1 秒
                if (System.currentTimeMillis() - rgvRun.currentTimeMilliOld > 100) {
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+10;
                if (System.currentTimeMillis() - rgvRun.currentTimeMilliOld > 500L) {
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                } else {
                    continue;
                }
                if (!deviceDetection()) {
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+10;
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.setRgvNo(slave.getOtherId());
                    RgvRunCache.updateRgvStatus(rgvRun);
                    if (!errorRgv.equals("无")){
@@ -359,20 +367,20 @@
                    rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
                }
                if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)){
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+10;
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.setRgvNo(slave.getOtherId());
                    RgvRunCache.updateRgvStatus(rgvRun);
                    continue;
                }
                if (rgvProtocol.getLoaded() == -1){
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+10;
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.setRgvNo(slave.getOtherId());
                    RgvRunCache.updateRgvStatus(rgvRun);
                    RgvErrCache.updateRgvErr(slave.getId(),"小车探物物状态异常");
                    continue;
                }
                if (rgvTaskProtocol.getAvoid() != 0) {
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+10;
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.setRgvNo(slave.getOtherId());
                    RgvRunCache.updateRgvStatus(rgvRun);
                    continue;
@@ -460,19 +468,19 @@
                        }
                    }
                }
                rgvRun.currentTimeMilliOld = System.currentTimeMillis()+10;
                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{
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV任务下发线程异常"+e.getMessage());
                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV任务下发线程异常"+e.getMessage());
                } catch (Exception e2){
//                    log.error("e2:"+e2.getMessage());
                }
                rgvRun = RgvRunCache.getRgvRun();
                rgvRun.currentTimeMilliOld = System.currentTimeMillis()+10;
                rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                rgvRun.setRgvNo(slave.getOtherId());
                RgvRunCache.updateRgvStatus(rgvRun);
                continue;
@@ -600,7 +608,7 @@
                                                errorRgv = "RGV行走目标超出范围";
                                                try{
                                                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                                                    deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                                                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV行走超出范围");
                                                } catch (Exception e2){
//                                                    log.error("e2:"+e2.getMessage());
                                                }
@@ -692,7 +700,7 @@
                        try{
                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                            deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                            deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV行走超出范围");
                        } catch (Exception e2){
//                            log.error("e2:"+e2.getMessage());
                        }
@@ -720,7 +728,7 @@
                        try{
                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                            deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                            deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV行走超出范围");
                        } catch (Exception e2){
//                            log.error("e2:"+e2.getMessage());
                        }
@@ -749,7 +757,7 @@
                            try{
                                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                                deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                                deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV行走超出范围");
                            } catch (Exception e2){
//                                log.error("e2:"+e2.getMessage());
                            }
@@ -806,7 +814,7 @@
                                                try{
                                                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                                                    deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                                                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV行走超出范围");
                                                } catch (Exception e2){
//                                                    log.error("e2:"+e2.getMessage());
                                                }
@@ -899,7 +907,7 @@
                        try{
                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                            deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                            deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV行走超出范围");
                        } catch (Exception e2){
//                            log.error("e2:"+e2.getMessage());
                        }
@@ -927,7 +935,7 @@
                        try{
                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                            deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                            deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV行走超出范围");
                        } catch (Exception e2){
//                            log.error("e2:"+e2.getMessage());
                        }
@@ -957,7 +965,7 @@
                            try{
                                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                                deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV行走超出范围");
                                deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV行走超出范围");
                            } catch (Exception e2){
//                                log.error("e2:"+e2.getMessage());
                            }
@@ -1019,7 +1027,7 @@
            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());
                deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV异常"+e.getMessage());
            } catch (Exception e2){
//                log.error("e2:"+e2.getMessage());
            }
@@ -1055,11 +1063,18 @@
//            OutputQueue.RGV.offer(MessageFormat.format("【{0}】RGV 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());
            try{
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.addDeviceError("rgv", slave.getId(), "RGVplc连接失败");
            } catch (Exception e2){
            if (System.currentTimeMillis()-currentTimeMilliConnectRgv>1000*60*10){
                try{
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGVplc连接失败");
                } catch (Exception e2){
//                log.error("e2:"+e2.getMessage());
                }
                if (currentTimeMilliConnectRgv == 0){
                    currentTimeMilliConnectRgv = System.currentTimeMillis()-1000*60*10-1;
                } else {
                    currentTimeMilliConnectRgv = System.currentTimeMillis();
                }
            }
        }
        initRgv();
@@ -1118,11 +1133,10 @@
                rgvProtocol.setErr4(status[11]);
                rgvProtocol.setErr5(status[12]);
                rgvProtocol.setErr6(status[13]);
                rgvProtocol.setErr7(status[14]);
                rgvProtocol.setErr8(status[15]);
//                System.out.println("读线程"+ slave.getId()+"---"+JSON.toJSONString(rgvProtocol));
//                System.out.println("读线程,小车号"+ slave.getId()+"时间戳:"+System.currentTimeMillis()+"小车数据:"+JSON.toJSONString(rgvProtocol));
                if (rgvProtocol.getRgvNo()==1){
                    log.info("读线程,小车号"+ slave.getId()+"时间戳:"+System.currentTimeMillis()+"小车数据:"+JSON.toJSONString(rgvProtocol));
                }
                OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), slave.getId()));
//                // 工位1复位信号
//                if (rgvProtocol.getStatusType().equals(RgvStatusType.WAITING)
@@ -1156,7 +1170,7 @@
                        try{
                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                            deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV plc数据库更新失败");
                            deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV plc数据库更新失败");
                        } catch (Exception e2){
//                            log.error("e2:"+e2.getMessage());
                        }
@@ -1177,7 +1191,7 @@
                try{
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgv", slave.getId(), "读取RGV plc状态信息失败");
                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "读取RGV plc状态信息失败");
                } catch (Exception e2){
//                    log.error("e2:"+e2.getMessage());
                }
@@ -1189,7 +1203,7 @@
            try{
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.addDeviceError("rgv", slave.getId(), "读取RGV plc状态信息失败");
                deviceErrorService.addDeviceError("rgvErr", slave.getId(), "读取RGV plc状态信息失败");
            } catch (Exception e2){
//                log.error("e2:"+e2.getMessage());
            }
@@ -1206,7 +1220,7 @@
            try{
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV写入命令为空");
                deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV写入命令为空");
            } catch (Exception e2){
//                log.error("e2:"+e2.getMessage());
            }
@@ -1228,10 +1242,11 @@
        OperateResult result2 = siemensNet.Write("DB100.6", taskProtocol.getTaskNo().intValue());
        OperateResult result3 = siemensNet.Write("DB100.10", taskProtocol.isDirection()? (short) 1 :  (short) 2); // 执行方向(面朝轨道 定位值左小右大)    true:左   false:右
        Thread.sleep(20L);
        this.wrkSign = 1;
        OperateResult result4 = siemensNet.Write("DB100.12.0", true);
        log.info("任务下发线程,小车号"+ slave.getId()+"时间戳:"+System.currentTimeMillis());
        this.wrkSign = 1;
//        log.info("任务下发线程,小车号"+ slave.getId()+"时间戳:"+System.currentTimeMillis());
//        if (taskProtocol.getAckFinish1() == 0) {
//            short commandFinish = 3;  //工位1、2任务同时写入
@@ -1269,7 +1284,7 @@
            try{
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV 命令下发"+JSON.toJSON(taskProtocol));
                deviceErrorService.addDeviceError("rgvWrite", slave.getId(), "RGV 命令下发"+JSON.toJSON(taskProtocol));
            } catch (Exception e2){
//                log.error("e2:"+e2.getMessage());
            }
@@ -1326,6 +1341,14 @@
    }
    /**
     * 清除作业启动中
     */
    @Override
    public void setWrkSign() {
        this.wrkSign = 0;
    }
    public void setDelRgvTask() {
        delRgvTask = true;
    }