|  |  | 
 |  |  | import com.zy.asrs.entity.BasRgvOpt; | 
 |  |  | import com.zy.asrs.service.BasRgvOptService; | 
 |  |  | import com.zy.asrs.service.BasRgvService; | 
 |  |  | import com.zy.asrs.service.DeviceErrorService; | 
 |  |  | import com.zy.asrs.utils.RouteUtils; | 
 |  |  | import com.zy.asrs.utils.TrackRangeUtils; | 
 |  |  | import com.zy.core.DevpThread; | 
 |  |  | 
 |  |  | import com.zy.core.model.RgvSlave; | 
 |  |  | import com.zy.core.model.Task; | 
 |  |  | import com.zy.core.model.command.RgvCommand; | 
 |  |  | import com.zy.core.model.protocol.RgvProtocol; | 
 |  |  | import com.zy.core.model.protocol.RgvTaskProtocol; | 
 |  |  | import com.zy.core.model.protocol.StaProtocol; | 
 |  |  | import com.zy.core.model.protocol.TaskProtocol; | 
 |  |  | import com.zy.core.model.protocol.*; | 
 |  |  | import lombok.Data; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.springframework.beans.factory.annotation.Value; | 
 |  |  | 
 |  |  |     private Long trackBenchmark = 1L; | 
 |  |  |     //  # 避让距离 | 
 |  |  |     private Long avoidDistance = 5000L; | 
 |  |  |     private String errorRgv = "-"; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 工位1复位信号 | 
 |  |  | 
 |  |  |     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(); | 
 |  |  | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } catch (Exception e) { | 
 |  |  |                 log.error("RGV数据读取线程异常!!!" + e.getMessage()); | 
 |  |  |                 log.error("rgv连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
 |  |  |                 try{ | 
 |  |  |                     DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
 |  |  |                     deviceErrorService.addDeviceError("rgvErr", slave.getId(), "rgv连接失败"+e.getMessage()); | 
 |  |  |                 } catch (Exception e2){ | 
 |  |  | //                    log.error("e2:"+e2.getMessage()); | 
 |  |  |                 } | 
 |  |  |                 initRgv(); | 
 |  |  | //                e.printStackTrace(); | 
 |  |  |             } | 
 |  |  | 
 |  |  |     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.currentTimeMillis()); | 
 |  |  |  | 
 |  |  |                 readStatus(); | 
 |  |  |  | 
 |  |  |             } catch (Exception e) { | 
 |  |  |                 log.error("RGV数据读取线程异常!!!" + e.getMessage()); | 
 |  |  |                 log.error("RGV数据读取线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
 |  |  |                 try{ | 
 |  |  |                     DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
 |  |  |                     deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV数据读取线程异常"+e.getMessage()); | 
 |  |  |                 } catch (Exception e2){ | 
 |  |  | //                    log.error("e2:"+e2.getMessage()); | 
 |  |  |                 } | 
 |  |  |                 initRgv(); | 
 |  |  | //                e.printStackTrace(); | 
 |  |  |             } | 
 |  |  | 
 |  |  |     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数据读取线程异常!!!" + e.getMessage()); | 
 |  |  |                 log.error("RGV数据任务下发复位线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
 |  |  |                 try{ | 
 |  |  |                     DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
 |  |  |                     deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV数据任务下发复位线程异常"+e.getMessage()); | 
 |  |  |                 } catch (Exception e2){ | 
 |  |  | //                    log.error("e2:"+e2.getMessage()); | 
 |  |  |                 } | 
 |  |  |                 initRgv(); | 
 |  |  | //                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取货任务下发线程异常!!!" + e.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("rgvErr", slave.getId(), "RGV任务下发线程异常"+e.getMessage()); | 
 |  |  | //                } catch (Exception e2){ | 
 |  |  | //                    log.error("e2:"+e2.getMessage()); | 
 |  |  | //                } | 
 |  |  | ////                e.printStackTrace(); | 
 |  |  | //            } | 
 |  |  | //        } | 
 |  |  | //    } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 漫游 | 
 |  |  | 
 |  |  |     private void taskWalkIssued() { | 
 |  |  |         while (true) { | 
 |  |  |             try { | 
 |  |  |                 if(!connectRgv){ | 
 |  |  |                     try { | 
 |  |  |                         Thread.sleep(1000L); | 
 |  |  |                     } catch (Exception e){ | 
 |  |  |  | 
 |  |  |                     } | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 // 休眠 1 秒 | 
 |  |  |                 Thread.sleep(100); | 
 |  |  |  | 
 |  |  | 
 |  |  |                 write(issued); | 
 |  |  |                 rgvTaskProtocol.setAvoid(0); | 
 |  |  |  | 
 |  |  |                 Thread.sleep(200); | 
 |  |  | //                Thread.sleep(200); | 
 |  |  |                 RgvTaskCache.updateRgvStatus(rgvTaskProtocol); | 
 |  |  |  | 
 |  |  |             } catch (Exception e) { | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     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 { | 
 |  |  |                 // 休眠 1 秒 | 
 |  |  |                 Thread.sleep(100); | 
 |  |  |                 if (!deviceDetection()) { | 
 |  |  |                 rgvRun = RgvRunCache.getRgvRun(); | 
 |  |  | //                System.out.println(JSON.toJSON(rgvRun)); | 
 |  |  |  | 
 |  |  |                 // 休眠 1 秒 | 
 |  |  |                 if (System.currentTimeMillis() - rgvRun.currentTimeMilliOld > 500L) { | 
 |  |  |                     rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50; | 
 |  |  |                 } else { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 if (!deviceDetection()) { | 
 |  |  |                     rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50; | 
 |  |  |                     rgvRun.setRgvNo(slave.getOtherId()); | 
 |  |  |                     RgvRunCache.updateRgvStatus(rgvRun); | 
 |  |  |                     if (!errorRgv.equals("无")){ | 
 |  |  |                         RgvErrCache.updateRgvErr(slave.getId(),errorRgv); | 
 |  |  |                     } | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); | 
 |  |  |                 RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId()); | 
 |  |  |                 if (rgvProtocol == null || rgvTaskProtocol == null) { | 
 |  |  | 
 |  |  |                     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)){ | 
 |  |  |                     rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50; | 
 |  |  |                     rgvRun.setRgvNo(slave.getOtherId()); | 
 |  |  |                     RgvRunCache.updateRgvStatus(rgvRun); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 if (rgvProtocol.getLoaded() == -1){ | 
 |  |  |                     rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50; | 
 |  |  |                     rgvRun.setRgvNo(slave.getOtherId()); | 
 |  |  |                     RgvRunCache.updateRgvStatus(rgvRun); | 
 |  |  |                     RgvErrCache.updateRgvErr(slave.getId(),"小车探物物状态异常"); | 
 |  |  |                     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); | 
 |  |  |                         rgvTaskProtocol.setAvoid(0); | 
 |  |  |  | 
 |  |  |                         Thread.sleep(200); | 
 |  |  |                         RgvTaskCache.updateRgvStatus(rgvTaskProtocol); | 
 |  |  |                     } | 
 |  |  |                     rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50; | 
 |  |  |                     rgvRun.setRgvNo(slave.getOtherId()); | 
 |  |  |                     RgvRunCache.updateRgvStatus(rgvRun); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  | 
 |  |  |                             if (rgvOtherStatusEnable()) { | 
 |  |  |                                 //另一台车是否允许此台车执行 | 
 |  |  |                                 if (!otherRgvAvoid(taskProtocol.getTargetPosition())) { | 
 |  |  |                                     continue; | 
 |  |  |                                     RgvErrCache.updateRgvErr(slave.getId(),errorRgv); | 
 |  |  |                                     break; | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                             if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50 | 
 |  |  |                                     && taskProtocol.getTargetPosition()>=rgvProtocol.getRgvPos()-50){ | 
 |  |  |                                 taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection()); | 
 |  |  |                                 RgvErrCache.updateRgvErr(slave.getId()); | 
 |  |  |                                 break; | 
 |  |  |                             } else { | 
 |  |  |                                 TaskProtocol issued = new TaskProtocol(taskProtocol,true); | 
 |  |  |                                 write(issued); | 
 |  |  |                                 RgvErrCache.updateRgvErr(slave.getId()); | 
 |  |  |                                 taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection()); | 
 |  |  |                                 break; | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     RgvErrCache.updateRgvErr(slave.getId()); | 
 |  |  |                 } 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; | 
 |  |  |                                     RgvErrCache.updateRgvErr(slave.getId(),errorRgv); | 
 |  |  |                                     break; | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                             if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50 | 
 |  |  | 
 |  |  |                                     DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, taskProtocol.getTargetPositionStaNoPlcId()); | 
 |  |  |                                     StaProtocol staProtocol = devpThread.getStation().get(taskProtocol.getTargetPositionStaNo()); | 
 |  |  |                                     if (staProtocol == null ) { | 
 |  |  |                                         continue; | 
 |  |  |                                         RgvErrCache.updateRgvErr(slave.getId(),"未查到小车作业站"+staProtocol.getStaNo()+"站点"); | 
 |  |  |                                         break; | 
 |  |  |                                     } | 
 |  |  |                                     // 判断是否满足入库条件 | 
 |  |  |                                     if (!staProtocol.isAutoing() || staProtocol.isLoading() | 
 |  |  |                                             || staProtocol.getWorkNo() != 0 | 
 |  |  |                                     ){ | 
 |  |  |                                         Thread.sleep(500); | 
 |  |  | //                                    System.out.println("<放货目标站>" + taskProtocol.getTargetPositionStaNo() + "<非自动或者有物或者存在工作号!!!>"); | 
 |  |  |                                         continue; | 
 |  |  |                                         RgvErrCache.updateRgvErr(slave.getId(),"小车等待"+staProtocol.getStaNo()+"站点就绪"); | 
 |  |  |                                         break; | 
 |  |  |                                     } | 
 |  |  |                                 } else if (taskProtocol.getTaskStatus()==2){ | 
 |  |  |                                     DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, taskProtocol.getTargetPositionStaNoPlcId()); | 
 |  |  |                                     StaProtocol staProtocol = devpThread.getStation().get(taskProtocol.getTargetPositionStaNo()); | 
 |  |  |                                     if (staProtocol == null ) { | 
 |  |  |                                         RgvErrCache.updateRgvErr(slave.getId(),"未查到小车作业站"+staProtocol.getStaNo()+"站点"); | 
 |  |  |                                         break; | 
 |  |  |                                     } | 
 |  |  |                                     // 判断是否满足入库条件 | 
 |  |  |                                     if (!staProtocol.isAutoing() || !staProtocol.isLoading() || staProtocol.getWorkNo()==0 | 
 |  |  |                                     ){ | 
 |  |  |                                         RgvErrCache.updateRgvErr(slave.getId(),"小车等待"+staProtocol.getStaNo()+"站点就绪"); | 
 |  |  |                                         break; | 
 |  |  |                                     } | 
 |  |  |                                 } | 
 |  |  |                                 TaskProtocol issued = new TaskProtocol(taskProtocol); | 
 |  |  |                                 write(issued); | 
 |  |  |                                 RgvErrCache.updateRgvErr(slave.getId()); | 
 |  |  |                                 taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection()); | 
 |  |  |                                 break; | 
 |  |  |                             } else { | 
 |  |  |                                 TaskProtocol issued = new TaskProtocol(taskProtocol,true); | 
 |  |  |                                 write(issued); | 
 |  |  |                                 RgvErrCache.updateRgvErr(slave.getId()); | 
 |  |  |                                 break; | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50; | 
 |  |  |                 rgvRun.setRgvNo(slave.getOtherId()); | 
 |  |  |                 RgvRunCache.updateRgvStatus(rgvRun); | 
 |  |  |             } catch (Exception e) { | 
 |  |  |                 log.error("RGV取货任务下发线程异常!!!" + e.getMessage()); | 
 |  |  |                 log.error("RGV任务下发线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
 |  |  |                 try{ | 
 |  |  |                     DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
 |  |  |                     deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV任务下发线程异常"+e.getMessage()); | 
 |  |  |                 } catch (Exception e2){ | 
 |  |  | //                    log.error("e2:"+e2.getMessage()); | 
 |  |  |                 } | 
 |  |  |                 rgvRun = RgvRunCache.getRgvRun(); | 
 |  |  |                 rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50; | 
 |  |  |                 rgvRun.setRgvNo(slave.getOtherId()); | 
 |  |  |                 RgvRunCache.updateRgvStatus(rgvRun); | 
 |  |  |                 continue; | 
 |  |  | //                e.printStackTrace(); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     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()); | 
 |  |  | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |         if (rgvProtocolOther.statusEnable) { | 
 |  |  |             if (rgvTaskProtocolOther == null) { | 
 |  |  |                 return false; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         return true; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     public boolean deviceDetection() { | 
 |  |  |         RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); | 
 |  |  |         RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId()); | 
 |  |  |  | 
 |  |  |         if (rgvProtocol == null || rgvTaskProtocol == null) { | 
 |  |  |             errorRgv = slave.getId()+"号小车连接失败"; | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |         if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO)) { | 
 |  |  |             errorRgv = slave.getId()+"号小车非自动"; | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |         if (rgvProtocol.getRgvPos().equals(0L) | 
 |  |  |                 || rgvTaskProtocol.getAvoid() == -1 | 
 |  |  |                 || rgvProtocol.getRgvPosDestination() == 0L) { | 
 |  |  |             errorRgv = slave.getId()+"号小车状态异常"; | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |         if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM)) { | 
 |  |  |             errorRgv = "无"; | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |         if ( (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM)) { | 
 |  |  |             errorRgv = slave.getId()+"号小车存在运行目标值,需要复位!!!"; | 
 |  |  |             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) { | 
 |  |  |             errorRgv = slave.getOtherId()+"号小车连接失败"; | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |         if (rgvProtocolOther.statusEnable) { | 
 |  |  |             if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1 || rgvProtocolOther.getRgvPosDestination() == 0L) { | 
 |  |  |                 errorRgv = slave.getOtherId()+"号小车状态异常"; | 
 |  |  |                 return false; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  | 
 |  |  |  | 
 |  |  |     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()); | 
 |  |  | 
 |  |  |         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) {//无需避让 | 
 |  |  |                         > 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()); | 
 |  |  |                                                 errorRgv = "RGV行走目标超出范围"; | 
 |  |  |                                                 try{ | 
 |  |  |                                                     DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
 |  |  |                                                     deviceErrorService.addDeviceError("rgvErr", 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){ | 
 |  |  |                             errorRgv = slave.getOtherId()+"号RGV等待作业..."; | 
 |  |  |                             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("行走超出范围!!!任务异常  联系管理员!!!"); | 
 |  |  |                         log.error("RGV行走超出范围!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
 |  |  |                         errorRgv = "RGV行走目标超出范围"; | 
 |  |  |  | 
 |  |  |                         try{ | 
 |  |  |                             DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
 |  |  |                             deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV行走超出范围"); | 
 |  |  |                         } catch (Exception e2){ | 
 |  |  | //                            log.error("e2:"+e2.getMessage()); | 
 |  |  |                         } | 
 |  |  |                         return false; | 
 |  |  |                     } | 
 |  |  |                     long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); | 
 |  |  | 
 |  |  |                     rgvTaskProtocolOther.setAvoid(1); | 
 |  |  |                     rgvTaskProtocolOther.setAvoidingTheDestination(avoid); | 
 |  |  |                     RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther); | 
 |  |  |                     return true; | 
 |  |  |                     return false; | 
 |  |  |                 } | 
 |  |  |             } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.ROAM)) { | 
 |  |  |                 if ((rgvProtocolOther.getRgvPosDestination() - rgvProtocolOther.getCarBodyJiaoMing()) | 
 |  |  |                         - (targetPosition + rgvProtocol.getCarBodyKunPeng()) | 
 |  |  |                         > avoidDistance) {//无需避让 | 
 |  |  |                         > avoidDistance - 50) {//无需避让 | 
 |  |  |                     return true; | 
 |  |  |                 } else { | 
 |  |  |                     long avoid = targetPosition + rgvProtocol.getCarBodyKunPeng() + avoidDistance + rgvProtocolOther.getCarBodyJiaoMing(); | 
 |  |  |                     if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) { | 
 |  |  |                         log.error("行走超出范围!!!任务异常  联系管理员!!!"); | 
 |  |  |                         log.error("RGV行走超出范围!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
 |  |  |                         errorRgv = "RGV行走目标超出范围"; | 
 |  |  |  | 
 |  |  |                         try{ | 
 |  |  |                             DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
 |  |  |                             deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV行走超出范围"); | 
 |  |  |                         } catch (Exception e2){ | 
 |  |  | //                            log.error("e2:"+e2.getMessage()); | 
 |  |  |                         } | 
 |  |  |                         return false; | 
 |  |  |                     } | 
 |  |  |                     long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); | 
 |  |  | 
 |  |  |                     rgvTaskProtocolOther.setAvoid(1); | 
 |  |  |                     rgvTaskProtocolOther.setAvoidingTheDestination(avoid); | 
 |  |  |                     RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther); | 
 |  |  |                     return true; | 
 |  |  |                     return false; | 
 |  |  |                 } | 
 |  |  |             } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)) { | 
 |  |  |                 if ((rgvProtocolOther.getRgvPosDestination() - rgvProtocolOther.getCarBodyJiaoMing()) | 
 |  |  |                         - (targetPosition + rgvProtocol.getCarBodyKunPeng()) | 
 |  |  |                         > avoidDistance) {//无需避让 | 
 |  |  |                         > avoidDistance - 50) {//无需避让 | 
 |  |  |                     return true; | 
 |  |  |                 } else { | 
 |  |  |                     if (rgvProtocolOther.getRgvPosDestination() >= rgvProtocolOther.getRgvPos()-50) { | 
 |  |  |                         long avoid = rgvProtocolOther.getRgvPos() - rgvProtocolOther.getCarBodyJiaoMing() - avoidDistance - rgvProtocol.getCarBodyKunPeng(); | 
 |  |  |                         if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) { | 
 |  |  |                             log.error("行走超出范围!!!任务异常  联系管理员!!!"); | 
 |  |  |                             log.error("RGV行走超出范围!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
 |  |  |                             errorRgv = "RGV行走目标超出范围"; | 
 |  |  |  | 
 |  |  |                             try{ | 
 |  |  |                                 DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
 |  |  |                                 deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV行走超出范围"); | 
 |  |  |                             } catch (Exception e2){ | 
 |  |  | //                                log.error("e2:"+e2.getMessage()); | 
 |  |  |                             } | 
 |  |  |                             return false; | 
 |  |  |                         } | 
 |  |  |                         long avoidAbs = Math.abs(avoid - rgvProtocol.getRgvPos()); | 
 |  |  | 
 |  |  |                         RgvTaskCache.updateRgvStatus(rgvTaskProtocol); | 
 |  |  |                         return false; | 
 |  |  |                     } | 
 |  |  |                     errorRgv = slave.getOtherId()+"号RGV影响,等待中..."; | 
 |  |  |  | 
 |  |  |                     return false; | 
 |  |  |                 } | 
 |  |  |             } else { | 
 |  |  |                 if ((rgvProtocolOther.getRgvPosDestinationOrPos(true) - rgvProtocolOther.getCarBodyJiaoMing()) | 
 |  |  |                         - (targetPosition + rgvProtocol.getCarBodyKunPeng()) | 
 |  |  |                         > avoidDistance) {//无需避让 | 
 |  |  |                         > avoidDistance - 50) {//无需避让 | 
 |  |  |                     return true; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } 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) {//无需避让 | 
 |  |  |                         > 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()); | 
 |  |  |                                                 errorRgv = "RGV行走目标超出范围"; | 
 |  |  |  | 
 |  |  |                                                 try{ | 
 |  |  |                                                     DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
 |  |  |                                                     deviceErrorService.addDeviceError("rgvErr", 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){ | 
 |  |  |                             errorRgv = slave.getOtherId()+"号RGV等待作业..."; | 
 |  |  |                             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("行走超出范围!!!任务异常  联系管理员!!!"); | 
 |  |  |                         log.error("RGV行走超出范围!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
 |  |  |                         errorRgv = "RGV行走目标超出范围"; | 
 |  |  |  | 
 |  |  |                         try{ | 
 |  |  |                             DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
 |  |  |                             deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV行走超出范围"); | 
 |  |  |                         } catch (Exception e2){ | 
 |  |  | //                            log.error("e2:"+e2.getMessage()); | 
 |  |  |                         } | 
 |  |  |                         return false; | 
 |  |  |                     } | 
 |  |  |                     long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); | 
 |  |  | 
 |  |  |                     rgvTaskProtocolOther.setAvoid(1); | 
 |  |  |                     rgvTaskProtocolOther.setAvoidingTheDestination(avoid); | 
 |  |  |                     RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther); | 
 |  |  |                     return true; | 
 |  |  |                     return false; | 
 |  |  |                 } | 
 |  |  |             } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.ROAM)) { | 
 |  |  |                 if ((targetPosition - rgvProtocol.getCarBodyJiaoMing()) | 
 |  |  |                         - (rgvProtocolOther.getRgvPosDestination() + rgvProtocolOther.getCarBodyKunPeng()) | 
 |  |  |                         > avoidDistance) {//无需避让 | 
 |  |  |                         > avoidDistance - 50) {//无需避让 | 
 |  |  |                     return true; | 
 |  |  |                 } else { | 
 |  |  |                     long avoid = targetPosition - rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng(); | 
 |  |  |                     if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) { | 
 |  |  |                         log.error("行走超出范围!!!任务异常  联系管理员!!!"); | 
 |  |  |                         log.error("RGV行走超出范围!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
 |  |  |                         errorRgv = "RGV行走目标超出范围"; | 
 |  |  |  | 
 |  |  |                         try{ | 
 |  |  |                             DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
 |  |  |                             deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV行走超出范围"); | 
 |  |  |                         } catch (Exception e2){ | 
 |  |  | //                            log.error("e2:"+e2.getMessage()); | 
 |  |  |                         } | 
 |  |  |                         return false; | 
 |  |  |                     } | 
 |  |  |                     long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); | 
 |  |  | 
 |  |  |                     rgvTaskProtocolOther.setAvoid(1); | 
 |  |  |                     rgvTaskProtocolOther.setAvoidingTheDestination(avoid); | 
 |  |  |                     RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther); | 
 |  |  |                     return true; | 
 |  |  |                     return false; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)) { | 
 |  |  |                 if ((targetPosition - rgvProtocol.getCarBodyJiaoMing()) | 
 |  |  |                         - (rgvProtocolOther.getRgvPosDestination() + rgvProtocolOther.getCarBodyKunPeng()) | 
 |  |  |                         > avoidDistance) {//无需避让 | 
 |  |  |                         > avoidDistance-50) {//无需避让 | 
 |  |  |                     return true; | 
 |  |  |                 } else { | 
 |  |  |                     if (rgvProtocolOther.getRgvPosDestination() <= rgvProtocolOther.getRgvPos() + 50) { | 
 |  |  |                         long avoid = rgvProtocolOther.getRgvPos() + rgvProtocolOther.getCarBodyKunPeng() + avoidDistance + rgvProtocol.getCarBodyJiaoMing(); | 
 |  |  |                         if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) { | 
 |  |  |                             log.error("行走超出范围!!!任务异常  联系管理员!!!"); | 
 |  |  |                             log.error("RGV行走超出范围!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
 |  |  |                             errorRgv = "RGV行走目标超出范围"; | 
 |  |  |  | 
 |  |  |                             try{ | 
 |  |  |                                 DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
 |  |  |                                 deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV行走超出范围"); | 
 |  |  |                             } catch (Exception e2){ | 
 |  |  | //                                log.error("e2:"+e2.getMessage()); | 
 |  |  |                             } | 
 |  |  |                             return false; | 
 |  |  |                         } | 
 |  |  |                         long avoidAbs = Math.abs(avoid - rgvProtocol.getRgvPos()); | 
 |  |  | 
 |  |  |                         RgvTaskCache.updateRgvStatus(rgvTaskProtocol); | 
 |  |  |                         return false; | 
 |  |  |                     } | 
 |  |  |                     errorRgv = slave.getOtherId()+"号RGV等待中..."; | 
 |  |  |                     return false; | 
 |  |  |                 } | 
 |  |  |             } else { | 
 |  |  |                 if ((rgvProtocolOther.getRgvPosDestinationOrPos(false) - rgvProtocolOther.getCarBodyJiaoMing()) | 
 |  |  |                         - (targetPosition + rgvProtocol.getCarBodyKunPeng()) | 
 |  |  |                         > avoidDistance) {//无需避让 | 
 |  |  |                         > avoidDistance - 50) {//无需避让 | 
 |  |  |                     return true; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         errorRgv = slave.getOtherId()+"号RGV影响,等待中..."; | 
 |  |  |         return false; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |                 rgvProtocol.setStatusEnable(false); | 
 |  |  |             } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("RGV异常!!!" + e.getMessage()); | 
 |  |  |             log.error("RGV异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
 |  |  |             try{ | 
 |  |  |                 DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
 |  |  |                 deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV异常"+e.getMessage()); | 
 |  |  |             } catch (Exception e2){ | 
 |  |  | //                log.error("e2:"+e2.getMessage()); | 
 |  |  |             } | 
 |  |  |             rgvProtocol.setStatusEnable(true); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  | //            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()); | 
 |  |  |  | 
 |  |  |             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(); | 
 |  |  | //        siemensNet.ConnectClose(); | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     private void readStatus() { | 
 |  |  |         try { | 
 |  |  |             OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 19); | 
 |  |  |             OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 20); | 
 |  |  |             if (result.IsSuccess) { | 
 |  |  |                 // 构建设备状态对象 | 
 |  |  |                 RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); | 
 |  |  | 
 |  |  |                 if (rgvProtocol.getRgvPosDestination()==0L){ | 
 |  |  |                     rgvProtocol.setRgvPosDestination(rgvProtocol.getRgvPos()); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 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.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 48)); | 
 |  |  |  | 
 |  |  | //                OperateResultExOne<byte[]> result11 = siemensNet.Read("DB100.12", (short) 1); | 
 |  |  |                 boolean[] status = siemensNet.getByteTransform().TransBool(result.Content, 18, 1); | 
 |  |  |                 boolean[] status = siemensNet.getByteTransform().TransBool(result.Content, 18, 2); | 
 |  |  |                 rgvProtocol.setLoaded(status[0]? (short)1:(short)0); | 
 |  |  |  | 
 |  |  |                 rgvProtocol.setErr1(status[8]); | 
 |  |  |                 rgvProtocol.setErr2(status[9]); | 
 |  |  |                 rgvProtocol.setErr3(status[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)); | 
 |  |  |                 OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), slave.getId())); | 
 |  |  | //                // 工位1复位信号 | 
 |  |  | //                if (rgvProtocol.getStatusType().equals(RgvStatusType.WAITING) | 
 |  |  | 
 |  |  | //                        } | 
 |  |  | //                    } | 
 |  |  | //                } | 
 |  |  |                 if (rgvProtocol.getAlarm$()!=0){ | 
 |  |  |                     RgvErrCache.updateRgvErr(slave.getId(),rgvProtocol.getAlarmM()); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 try { | 
 |  |  |                     // 根据实时信息更新数据库 | 
 |  |  | 
 |  |  |                     basRgv.setRgvSts((int) rgvProtocol.getMode()); | 
 |  |  |                     if (!basRgvService.updateById(rgvProtocol.toSqlModel(basRgv))) { | 
 |  |  |                         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("rgvErr", slave.getId(), "RGV plc数据库更新失败"); | 
 |  |  |                         } catch (Exception e2){ | 
 |  |  | //                            log.error("e2:"+e2.getMessage()); | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } catch (Exception ignore) { | 
 |  |  |  | 
 |  |  | 
 |  |  |                 connectRgv = false; | 
 |  |  | //                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("rgvErr", slave.getId(), "读取RGV plc状态信息失败"); | 
 |  |  |                 } catch (Exception e2){ | 
 |  |  | //                    log.error("e2:"+e2.getMessage()); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } catch (Exception e) { | 
 |  |  | //            e.printStackTrace(); | 
 |  |  | //            OutputQueue.RGV.offer(MessageFormat.format("【{0}】读取RGV plc状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); | 
 |  |  |             log.error("读取RGV plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
 |  |  |  | 
 |  |  |             try{ | 
 |  |  |                 DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
 |  |  |                 deviceErrorService.addDeviceError("rgvErr", slave.getId(), "读取RGV plc状态信息失败"); | 
 |  |  |             } catch (Exception e2){ | 
 |  |  | //                log.error("e2:"+e2.getMessage()); | 
 |  |  |             } | 
 |  |  |             initRgv(); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     private boolean write(TaskProtocol taskProtocol) throws InterruptedException { | 
 |  |  |         if (null == taskProtocol) { | 
 |  |  |             log.error("RGV写入命令为空"); | 
 |  |  |             log.error("RGV写入命令为空 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
 |  |  |  | 
 |  |  |             try{ | 
 |  |  |                 DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
 |  |  |                 deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV写入命令为空"); | 
 |  |  |             } catch (Exception e2){ | 
 |  |  | //                log.error("e2:"+e2.getMessage()); | 
 |  |  |             } | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  | //        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(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()); | 
 |  |  |  | 
 |  |  |             try{ | 
 |  |  |                 DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
 |  |  |                 deviceErrorService.addDeviceError("rgvWrite", slave.getId(), "RGV 命令下发"+JSON.toJSON(taskProtocol)); | 
 |  |  |             } catch (Exception e2){ | 
 |  |  | //                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; | 
 |  |  |         } else { | 
 |  |  | 
 |  |  |         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 { | 
 |  |  |             // 日志记录 | 
 |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         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; | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 清除作业启动中 | 
 |  |  |      */ | 
 |  |  |     @Override | 
 |  |  |     public void setWrkSign() { | 
 |  |  |         this.wrkSign = 0; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setDelRgvTask() { | 
 |  |  |         delRgvTask = true; | 
 |  |  |     } |