|  |  | 
 |  |  |     private BasCrnErrorMapper basCrnErrorMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private EmptyBarrelInService emptyBarrelInService; | 
 |  |  |     @Autowired | 
 |  |  |     private WrkMastStaService wrkMastStaService; | 
 |  |  |  | 
 |  |  |     @Value("${wms.url}") | 
 |  |  |     private String wmsUrl; | 
 |  |  | 
 |  |  |                 } else { | 
 |  |  |                     staProtocol = staProtocol.clone(); | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()) { | 
 |  |  | //                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()) { | 
 |  |  |                     // 查询工作档 | 
 |  |  |                     WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(crnStn.getStaNo()); | 
 |  |  |                     if (wrkMast == null) { | 
 |  |  | 
 |  |  |  | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  | //                } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | 
 |  |  |         for (RgvSlave rgvSlave:slaveProperties.getRgv()){ | 
 |  |  |             ZyRgvThread rgvThread = (ZyRgvThread)SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  |             RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
 |  |  |             if (rgvProtocol.getModeType() != RgvModeType.AUTO){ | 
 |  |  |             if (Cools.isEmpty(rgvProtocol)){ | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |             int workNo1 = 0; | 
 |  |  |             int workNo2 = 0; | 
 |  |  |             short souSta1 = 0; | 
 |  |  |             short sta1 = 0; | 
 |  |  |             short souSta2 = 0; | 
 |  |  |             short sta2 = 0; | 
 |  |  |  | 
 |  |  |             //工位一任务 | 
 |  |  |             for (RgvSlave.Sta inStn :  rgvSlave.getInStn()){ | 
 |  |  |                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, inStn.getSourcePlcId()); | 
 |  |  |                 StaProtocol staProtocol = devpThread.getStation().get(inStn.getSourceStaNo()); | 
 |  |  |                 if (staProtocol == null) { | 
 |  |  |                     break; | 
 |  |  | //                    continue; | 
 |  |  |                 } else { | 
 |  |  |                     staProtocol = staProtocol.clone(); | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.isLoading() && staProtocol.isLoading() && staProtocol.isInEnable()){ | 
 |  |  |                     if (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() <9900){ | 
 |  |  |                         WrkMast wrkMast = wrkMastService.selectByworkNo(staProtocol.getWorkNo()); | 
 |  |  |                         if (Cools.isEmpty(wrkMast)){ | 
 |  |  |                             log.error("未找到工作档"); | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         workNo1 = wrkMast.getWrkNo(); | 
 |  |  |                         souSta1 = inStn.getSourceStaNo().shortValue(); | 
 |  |  |                         sta1 = Utils.getRgvEndStaNo(rgvSlave.getId(),wrkMast.getStaNo()); | 
 |  |  |                         break; | 
 |  |  |                     } | 
 |  |  |                     workNo1 = workNo++; | 
 |  |  |                     souSta1 = inStn.getSourceStaNo().shortValue(); | 
 |  |  |                     sta1 = inStn.getStaNo().shortValue(); | 
 |  |  |                     break; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |             //工位二任务 | 
 |  |  |             for (RgvSlave.Sta inStn :  rgvSlave.getInStn()){ | 
 |  |  |                 if (souSta1 == inStn.getSourceStaNo()){ | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, inStn.getSourcePlcId()); | 
 |  |  |                 StaProtocol staProtocol = devpThread.getStation().get(inStn.getSourceStaNo()); | 
 |  |  |                 if (staProtocol == null) { | 
 |  |  |                     break; | 
 |  |  | //                    continue; | 
 |  |  |                 } else { | 
 |  |  |                     staProtocol = staProtocol.clone(); | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.isLoading() && staProtocol.isLoading() && staProtocol.isInEnable()){ | 
 |  |  |                     if (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() <9900){ | 
 |  |  |                         WrkMast wrkMast = wrkMastService.selectByworkNo(staProtocol.getWorkNo()); | 
 |  |  |                         if (Cools.isEmpty(wrkMast)){ | 
 |  |  |                             log.error("未找到工作档"); | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         workNo2 = wrkMast.getWrkNo(); | 
 |  |  |                         souSta2 = inStn.getSourceStaNo().shortValue(); | 
 |  |  |                         sta2 = Utils.getRgvEndStaNo(rgvSlave.getId(),wrkMast.getStaNo()); | 
 |  |  |                         break; | 
 |  |  |                     } | 
 |  |  |                     workNo2 = workNo++; | 
 |  |  |                     souSta2 = inStn.getSourceStaNo().shortValue(); | 
 |  |  |                     sta2 = inStn.getStaNo().shortValue(); | 
 |  |  |                     break; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             //rgv任务下发-------------------------------------------------------------- | 
 |  |  |             RgvCommand command = new RgvCommand(); | 
 |  |  |             command.setRgvNo(rgvSlave.getId()); // RGV编号 | 
 |  |  |             //工位1 | 
 |  |  |             command.setTaskNo1(workNo1); // 工作号 | 
 |  |  |             command.setSourceStaNo1(souSta1); // 源站 | 
 |  |  |             command.setDestinationStaNo1(sta1);  // 目标站 | 
 |  |  |             command.setAckFinish1(false);  // 任务完成确认位 | 
 |  |  |  | 
 |  |  |             //工位2 | 
 |  |  |             command.setTaskNo2(workNo2); // 工作号 | 
 |  |  |             command.setSourceStaNo2(souSta2); // 源站 | 
 |  |  |             command.setDestinationStaNo2(sta2);  // 目标站 | 
 |  |  |             command.setAckFinish2(false);  // 任务完成确认位 | 
 |  |  |  | 
 |  |  |             if (workNo1 != 0 && workNo2 ==0){ | 
 |  |  |                 command.setTaskMode(RgvTaskModeType.FETCH_PUT2); // 任务模式: 取放货 | 
 |  |  |             } else if (workNo1 == 0 && workNo2 !=0) { | 
 |  |  |                 command.setTaskMode(RgvTaskModeType.FETCH_PUT1); // 任务模式: 取放货 | 
 |  |  |             }else { | 
 |  |  |                 command.setTaskMode(RgvTaskModeType.FETCH_PUT_ALL); // 任务模式: 取放货 | 
 |  |  |                 rgvProtocol = rgvProtocol.clone(); | 
 |  |  |             } | 
 |  |  |             command.setCommand(false); | 
 |  |  |             MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(2, command)); | 
 |  |  |             log.info("rgv任务下发:"+JSON.toJSONString(command)); | 
 |  |  |             if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.IDLE && rgvProtocol.getLoaded1() == 0){ | 
 |  |  |                 boolean work1 = false; | 
 |  |  |                 boolean work2 = false; | 
 |  |  |                 int workNo1 = 0; | 
 |  |  |                 int workNo2 = 0; | 
 |  |  |                 short souSta1 = 0; | 
 |  |  |                 short sta1 = 0; | 
 |  |  |                 short souSta2 = 0; | 
 |  |  |                 short sta2 = 0; | 
 |  |  |  | 
 |  |  |                 //工位一任务 | 
 |  |  |                 for (RgvSlave.Sta inStn :  rgvSlave.getInStn()){ | 
 |  |  |                     SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, inStn.getSourcePlcId()); | 
 |  |  |                     StaProtocol staProtocol = devpThread.getStation().get(inStn.getSourceStaNo()); | 
 |  |  |                     if (staProtocol == null) { | 
 |  |  |                         break; | 
 |  |  | //                    continue; | 
 |  |  |                     } else { | 
 |  |  |                         staProtocol = staProtocol.clone(); | 
 |  |  |                     } | 
 |  |  |                     if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()){ | 
 |  |  |                         if (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() <9900){ | 
 |  |  |                             WrkMast wrkMast = wrkMastService.selectByworkNo(staProtocol.getWorkNo()); | 
 |  |  |                             if (Cools.isEmpty(wrkMast)){ | 
 |  |  |                                 log.error("未找到工作档"); | 
 |  |  |                                 continue; | 
 |  |  |                             } | 
 |  |  |                             workNo1 = wrkMast.getWrkNo(); | 
 |  |  |                             souSta1 = Utils.getRgvStaNo(rgvSlave.getId(),wrkMast.getSourceStaNo()); | 
 |  |  |                             sta1 = Utils.getRgvEndStaNo(rgvSlave.getId(),wrkMast.getStaNo()); | 
 |  |  |                             work1 = true; | 
 |  |  |                             devpThread.setPakMk(inStn.getSourceStaNo(),false); | 
 |  |  |                             break; | 
 |  |  |                         } | 
 |  |  |                         workNo1 = workNo++; | 
 |  |  |                         souSta1 = Utils.getRgvStaNo(rgvSlave.getId(),inStn.getSourceStaNo()); | 
 |  |  |                         sta1 = Utils.getRgvStaNo(rgvSlave.getId(),inStn.getStaNo()); | 
 |  |  |                         work1 = true; | 
 |  |  |                         devpThread.setPakMk(inStn.getSourceStaNo(),false); | 
 |  |  |                         break; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |                 //工位二任务 | 
 |  |  |                 for (RgvSlave.Sta inStn :  rgvSlave.getInStn()){ | 
 |  |  |                     if (souSta1 == inStn.getSourceStaNo()){ | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, inStn.getSourcePlcId()); | 
 |  |  |                     StaProtocol staProtocol = devpThread.getStation().get(inStn.getSourceStaNo()); | 
 |  |  |                     if (staProtocol == null) { | 
 |  |  |                         break; | 
 |  |  | //                    continue; | 
 |  |  |                     } else { | 
 |  |  |                         staProtocol = staProtocol.clone(); | 
 |  |  |                     } | 
 |  |  |                     if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()&& staProtocol.isPakMk()){ | 
 |  |  |                         if (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() <9900){ | 
 |  |  |                             WrkMast wrkMast = wrkMastService.selectByworkNo(staProtocol.getWorkNo()); | 
 |  |  |                             if (Cools.isEmpty(wrkMast)){ | 
 |  |  |                                 log.error("未找到工作档"); | 
 |  |  |                                 continue; | 
 |  |  |                             } | 
 |  |  |                             workNo2 = wrkMast.getWrkNo(); | 
 |  |  |                             souSta2 = inStn.getSourceStaNo().shortValue(); | 
 |  |  |                             sta2 = Utils.getRgvEndStaNo(rgvSlave.getId(),wrkMast.getStaNo()); | 
 |  |  |                             work2 = true; | 
 |  |  |                             devpThread.setPakMk(inStn.getSourceStaNo(),false); | 
 |  |  |                             break; | 
 |  |  |                         } | 
 |  |  |                         workNo2 = workNo++; | 
 |  |  |                         souSta2 = inStn.getSourceStaNo().shortValue(); | 
 |  |  |                         sta2 = inStn.getStaNo().shortValue(); | 
 |  |  |                         work2 = true; | 
 |  |  |                         devpThread.setPakMk(inStn.getSourceStaNo(),false); | 
 |  |  |                         break; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 if (work1 || work2){ | 
 |  |  |                     //rgv任务下发-------------------------------------------------------------- | 
 |  |  |                     RgvCommand command = new RgvCommand(); | 
 |  |  |                     command.setRgvNo(rgvSlave.getId()); // RGV编号 | 
 |  |  |                     //工位1 | 
 |  |  |                     command.setTaskNo1(workNo1); // 工作号 | 
 |  |  |                     command.setSourceStaNo1(souSta1); // 源站 | 
 |  |  |                     command.setDestinationStaNo1(sta1);  // 目标站 | 
 |  |  |                     command.setAckFinish1(false);  // 任务完成确认位 | 
 |  |  |  | 
 |  |  |                     //工位2 | 
 |  |  |                     command.setTaskNo2(workNo2); // 工作号 | 
 |  |  |                     command.setSourceStaNo2(souSta2); // 源站 | 
 |  |  |                     command.setDestinationStaNo2(sta2);  // 目标站 | 
 |  |  |                     command.setAckFinish2(false);  // 任务完成确认位 | 
 |  |  |  | 
 |  |  |                     if (workNo1 == 0 && workNo2 !=0){ | 
 |  |  |                         command.setTaskMode(RgvTaskModeType.FETCH_PUT2); // 任务模式: 取放货 | 
 |  |  |                     } else if (workNo1 != 0 && workNo2 ==0) { | 
 |  |  |                         command.setTaskMode(RgvTaskModeType.FETCH_PUT1); // 任务模式: 取放货 | 
 |  |  |                     }else { | 
 |  |  |                         command.setTaskMode(RgvTaskModeType.FETCH_PUT_ALL); // 任务模式: 取放货 | 
 |  |  |                     } | 
 |  |  |                     command.setCommand(false); | 
 |  |  |                     rgvTaskSave(command); | 
 |  |  |                     MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(2, command)); | 
 |  |  |                     log.info("rgv任务下发:"+JSON.toJSONString(command)); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     public synchronized void RGVTaskOver() { | 
 |  |  |         for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
 |  |  |             ZyRgvThread rgvThread = (ZyRgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  |             RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
 |  |  |             if (Cools.isEmpty(rgvProtocol)){ | 
 |  |  |                 continue; | 
 |  |  |             }else { | 
 |  |  |                 rgvProtocol = rgvProtocol.clone(); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             //工位一任务完成 | 
 |  |  |             if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.WAITING && rgvProtocol.getLoaded1() == 1) { | 
 |  |  |                 WrkMastSta wrkMastSta = wrkMastStaService.selectByRgvNoandWrkNo(rgvProtocol.getRgvNo(), rgvProtocol.getTaskNo1()); | 
 |  |  |                 if (Cools.isEmpty(wrkMastSta)){ | 
 |  |  |                     log.error("未查询到rgv工作任务,rgv编号{},工作号{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1()); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 for (RgvSlave.Sta outStn :rgvSlave.getOutStn()){ | 
 |  |  |                     SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, outStn.getSourcePlcId()); | 
 |  |  |                     StaProtocol staProtocol = devpThread.getStation().get(outStn.getSourceStaNo()); | 
 |  |  |                     if (staProtocol == null) { | 
 |  |  |                         continue; | 
 |  |  |                     } else { | 
 |  |  |                         staProtocol = staProtocol.clone(); | 
 |  |  |                     } | 
 |  |  |                     if (staProtocol.isAutoing() && staProtocol.isLoading()  && staProtocol.isPakMk()){ | 
 |  |  | //                        staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); | 
 |  |  | //                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); | 
 |  |  |                         if (!MessageQueue.offer(SlaveType.Devp, outStn.getStaPlcId(), new Task(2, staProtocol))) { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(3,new RgvCommand())); | 
 |  |  |                 log.info("{}号rgv工位一工作完成复位,工作号:{}",rgvSlave.getId(),wrkMastSta.getWrkNo()); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             //工位二任务完成 | 
 |  |  |             if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.WAITING2 && rgvProtocol.getLoaded1() == 1) { | 
 |  |  |                 WrkMastSta wrkMastSta = wrkMastStaService.selectByRgvNoandWrkNo(rgvProtocol.getRgvNo(), rgvProtocol.getTaskNo2()); | 
 |  |  |                 if (Cools.isEmpty(wrkMastSta)){ | 
 |  |  |                     log.error("未查询到rgv工作任务,rgv编号{},工作号{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo2()); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 for (RgvSlave.Sta outStn :rgvSlave.getOutStn()){ | 
 |  |  |                     SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, outStn.getSourcePlcId()); | 
 |  |  |                     StaProtocol staProtocol = devpThread.getStation().get(outStn.getSourceStaNo()); | 
 |  |  |                     if (staProtocol == null) { | 
 |  |  |                         continue; | 
 |  |  |                     } else { | 
 |  |  |                         staProtocol = staProtocol.clone(); | 
 |  |  |                     } | 
 |  |  |                     if (staProtocol.isAutoing() && staProtocol.isLoading()  && staProtocol.isPakMk()){ | 
 |  |  | //                        staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); | 
 |  |  | //                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); | 
 |  |  |                         if (!MessageQueue.offer(SlaveType.Devp, outStn.getStaPlcId(), new Task(2, staProtocol))) { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(4,new RgvCommand())); | 
 |  |  |                 log.info("{}号rgv工位二工作完成复位,工作号:{}",rgvSlave.getId(),wrkMastSta.getWrkNo2()); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public boolean rgvTaskSave(RgvCommand command){ | 
 |  |  |         Wrapper<WrkMastSta> wrkMastStaWrapper = new EntityWrapper<WrkMastSta>().eq("wrk_crn", command.getRgvNo()).eq("wrk_no", command.getTaskNo1()); | 
 |  |  |         WrkMastSta wrkMastSta1 = wrkMastStaService.selectOne(wrkMastStaWrapper); | 
 |  |  |         if (!Cools.isEmpty(wrkMastSta1)){ | 
 |  |  |             wrkMastStaService.delete(wrkMastStaWrapper); | 
 |  |  |         } | 
 |  |  |         WrkMastSta wrkMastSta = new WrkMastSta(); | 
 |  |  |         wrkMastSta.setWrkNo(Long.valueOf(command.getTaskNo1())); | 
 |  |  |         wrkMastSta.setWrkNo2(Long.valueOf(command.getTaskNo2())); | 
 |  |  |         wrkMastSta.setWrkStart(command.getSourceStaNo1().intValue()); | 
 |  |  |         wrkMastSta.setWrkEnd(command.getDestinationStaNo1().intValue()); | 
 |  |  |         wrkMastSta.setStaStart(command.getSourceStaNo2().intValue()); | 
 |  |  |         wrkMastSta.setStaEnd(command.getDestinationStaNo2().intValue()); | 
 |  |  |         wrkMastSta.setWrkSts(1); | 
 |  |  |         Date now = new Date(); | 
 |  |  |         wrkMastSta.setCreateTime(now); | 
 |  |  |         wrkMastSta.setUpdateTime(now); | 
 |  |  |         wrkMastSta.setWrkCrn(command.getRgvNo()); | 
 |  |  |         wrkMastSta.setWrkType(command.getTaskMode().intValue()); | 
 |  |  |         return wrkMastStaService.insert(wrkMastSta); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |