|  |  | 
 |  |  |     private boolean resetFlag2 = false; | 
 |  |  |  | 
 |  |  |     private boolean connectRgv = false; | 
 |  |  |     public Long currentTimeMilliConnectRgv= 0L; | 
 |  |  |  | 
 |  |  |     private boolean delRgvTask = false; | 
 |  |  |     private short wrkSign = 0; | 
 |  |  |  | 
 |  |  |     public RgvThread(RgvSlave slave) { | 
 |  |  |         this.slave = slave; | 
 |  |  | 
 |  |  |     @Override | 
 |  |  |     @SuppressWarnings("InfiniteLoopStatement") | 
 |  |  |     public void run() { | 
 |  |  |         initRgv(); | 
 |  |  |         try{ | 
 |  |  |             Thread.sleep(2000); | 
 |  |  |         } catch (Exception e){ | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |         connectRgv = this.connect(); | 
 |  |  |         while(!connectRgv){ | 
 |  |  |             try { | 
 |  |  | 
 |  |  |         new Thread(this::taskIssued).start(); | 
 |  |  |  | 
 |  |  |         // 启动漫游线程 | 
 |  |  | //        new Thread(this::taskWalkIssued).start(); | 
 |  |  |         new Thread(this::taskWalkIssued).start(); | 
 |  |  | //        new Thread(this::taskWalkIssued2).start(); | 
 |  |  |  | 
 |  |  |         // 启动任务完成线程 | 
 |  |  | 
 |  |  |     private void rgvConnect() { | 
 |  |  |         while (true) { | 
 |  |  |             try { | 
 |  |  |                 Thread.sleep(1000); | 
 |  |  |                 if(!connectRgv){ | 
 |  |  |                     try { | 
 |  |  |                         connectRgv = this.connect(); | 
 |  |  | 
 |  |  |                 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()); | 
 |  |  |                 } | 
 |  |  | 
 |  |  |     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()); | 
 |  |  | //                System.out.println("读线程,小车号"+ slave.getId()+"时间戳:"+System.currentTimeMillis()); | 
 |  |  |  | 
 |  |  |                 readStatus(); | 
 |  |  |  | 
 |  |  | 
 |  |  |                 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()); | 
 |  |  |                 } | 
 |  |  | 
 |  |  |     private void taskComplete() { | 
 |  |  |         while (true) { | 
 |  |  |             try { | 
 |  |  |                 if(!connectRgv){ | 
 |  |  |                     try { | 
 |  |  |                         Thread.sleep(1000L); | 
 |  |  |                     } catch (Exception e){ | 
 |  |  |  | 
 |  |  |                     } | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 if (delRgvTask){ | 
 |  |  |                     writeDelRgvTask(); | 
 |  |  |                     delRgvTask = false; | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 Thread.sleep(40); | 
 |  |  |                 Thread.sleep(50L); | 
 |  |  |  | 
 |  |  |                 OperateResultExOne<byte[]> result = siemensNet.Read("DB100.12", (short) 1); | 
 |  |  |                 boolean[] status = siemensNet.getByteTransform().TransBool(result.Content, 0, 1); | 
 |  |  |                 if (status[0]){ | 
 |  |  |                     Thread.sleep(500L); | 
 |  |  |                     OperateResult result4 = siemensNet.Write("DB100.12.0", false); | 
 |  |  |                 } | 
 |  |  |             } 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()); | 
 |  |  |                 } | 
 |  |  | 
 |  |  | //                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()); | 
 |  |  | //                } | 
 |  |  | 
 |  |  |     /** | 
 |  |  |      * 漫游 | 
 |  |  |      */ | 
 |  |  | //    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); | 
 |  |  | // | 
 |  |  |     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(); | 
 |  |  | //            } | 
 |  |  | //        } | 
 |  |  | //    } | 
 |  |  |                 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 { | 
 |  |  |                 Thread.sleep(50); | 
 |  |  |                 Thread.sleep(100); | 
 |  |  |                 rgvRun = RgvRunCache.getRgvRun(); | 
 |  |  | //                System.out.println(JSON.toJSON(rgvRun)); | 
 |  |  |  | 
 |  |  |                 // 休眠 1 秒 | 
 |  |  |                 if (System.currentTimeMillis() - rgvRun.currentTimeMilliOld > 1000) { | 
 |  |  |                 if (System.currentTimeMillis() - rgvRun.currentTimeMilliOld > 500L) { | 
 |  |  |                     rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50; | 
 |  |  |                 } else { | 
 |  |  |                     continue; | 
 |  |  | 
 |  |  |                     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; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  | 
 |  |  |                     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); | 
 |  |  | 
 |  |  |                 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()); | 
 |  |  |                 } | 
 |  |  | 
 |  |  |             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)) { | 
 |  |  | 
 |  |  |  | 
 |  |  |     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()); | 
 |  |  | 
 |  |  |                                                 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()); | 
 |  |  |                                                 } | 
 |  |  | 
 |  |  |                             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()); | 
 |  |  | 
 |  |  |  | 
 |  |  |                         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()); | 
 |  |  |                         } | 
 |  |  | 
 |  |  |  | 
 |  |  |                         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()); | 
 |  |  |                         } | 
 |  |  | 
 |  |  |  | 
 |  |  |                             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()); | 
 |  |  |                             } | 
 |  |  | 
 |  |  |  | 
 |  |  |                                                 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()); | 
 |  |  |                                                 } | 
 |  |  | 
 |  |  |                             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()); | 
 |  |  | 
 |  |  |  | 
 |  |  |                         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()); | 
 |  |  |                         } | 
 |  |  | 
 |  |  |  | 
 |  |  |                         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()); | 
 |  |  |                         } | 
 |  |  | 
 |  |  |  | 
 |  |  |                             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()); | 
 |  |  |                             } | 
 |  |  | 
 |  |  |             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()); | 
 |  |  |             } | 
 |  |  | 
 |  |  | //            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(); | 
 |  |  | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 8)); | 
 |  |  | //                rgvProtocol.setStatus((short)1); | 
 |  |  |  | 
 |  |  |                 //作业启动中  解决任务下发后小车状态未更新,小车状态不及时 | 
 |  |  |                 if (this.wrkSign == 1 && rgvProtocol.getStatus()!=(short)1){ | 
 |  |  |                     this.wrkSign = 0; | 
 |  |  |                 } | 
 |  |  |                 if (this.wrkSign == 1){ | 
 |  |  |                     rgvProtocol.setStatus((short)110); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 rgvProtocol.setTaskNo((long)siemensNet.getByteTransform().TransInt32(result.Content, 10)); | 
 |  |  |  | 
 |  |  |                 rgvProtocol.setRgvNo((int)siemensNet.getByteTransform().TransInt16(result.Content, 14)); | 
 |  |  | 
 |  |  |                 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)); | 
 |  |  |                 OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), slave.getId())); | 
 |  |  | //                // 工位1复位信号 | 
 |  |  | //                if (rgvProtocol.getStatusType().equals(RgvStatusType.WAITING) | 
 |  |  | 
 |  |  |  | 
 |  |  |                         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()); | 
 |  |  |                         } | 
 |  |  | 
 |  |  |  | 
 |  |  |                 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()); | 
 |  |  |                 } | 
 |  |  | 
 |  |  |  | 
 |  |  |             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()); | 
 |  |  |             } | 
 |  |  | 
 |  |  |  | 
 |  |  |             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()); | 
 |  |  |             } | 
 |  |  | 
 |  |  |         } | 
 |  |  | //        convertRow(command); | 
 |  |  | //        taskProtocol.setRgvNo(slave.getId()); | 
 |  |  |         Long[] array = new Long[11]; | 
 |  |  | //        Long[] array = new Long[11]; | 
 |  |  |         OperateResult result41 = siemensNet.Write("DB100.12.0", false); | 
 |  |  |  | 
 |  |  | //        array[0] = taskProtocol.getAckFinish1(); | 
 |  |  | //        array[1] = taskProtocol.getTaskNo(); | 
 |  |  | //        array[2] = taskProtocol.getTaskMode(); | 
 |  |  | 
 |  |  |         OperateResult result1 = siemensNet.Write("DB100.4", (short) taskStatus); | 
 |  |  |         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); | 
 |  |  |  | 
 |  |  |         OperateResult result4 = siemensNet.Write("DB100.12.0", true); | 
 |  |  |         this.wrkSign = 1; | 
 |  |  |  | 
 |  |  | //        log.info("任务下发线程,小车号"+ slave.getId()+"时间戳:"+System.currentTimeMillis()); | 
 |  |  |  | 
 |  |  | //        if (taskProtocol.getAckFinish1() == 0) { | 
 |  |  | //            short commandFinish = 3;  //工位1、2任务同时写入 | 
 |  |  | //            Thread.sleep(100L); | 
 |  |  | 
 |  |  |         } catch (Exception ignore) { | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         readStatus(); | 
 |  |  |         if (result != null && result.IsSuccess) { | 
 |  |  | //            Thread.sleep(50); | 
 |  |  | //            this.readStatus(); | 
 |  |  | 
 |  |  |  | 
 |  |  |             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()); | 
 |  |  |             } | 
 |  |  | 
 |  |  |         OperateResult result1 = siemensNet.Write("DB100.4", (short) 0); | 
 |  |  |         OperateResult result2 = siemensNet.Write("DB100.6", (int) 0); | 
 |  |  |         OperateResult result3 = siemensNet.Write("DB100.10", (short) 0); // 执行方向(面朝轨道 定位值左小右大)    true:左   false:右 | 
 |  |  |         log.info("任务完成下发线程,小车号"+ slave.getId()+"时间戳:"+System.currentTimeMillis()); | 
 |  |  |  | 
 |  |  |         try { | 
 |  |  |             // 日志记录 | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 清除作业启动中 | 
 |  |  |      */ | 
 |  |  |     @Override | 
 |  |  |     public void setWrkSign() { | 
 |  |  |         this.wrkSign = 0; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setDelRgvTask() { | 
 |  |  |         delRgvTask = true; | 
 |  |  |     } |