|  |  | 
 |  |  |                     staProtocol = staProtocol.clone(); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  | //                // 入出库模式判断 | 
 |  |  | //                if ( inSta.getStaNo()==180 && devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; } | 
 |  |  |                 // 入出库模式判断 | 
 |  |  | //                if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; } | 
 |  |  |                 if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) { continue; } | 
 |  |  |  | 
 |  |  |                 // 判断是否满足入库条件 | 
 |  |  |                 if (staProtocol.isAutoing() && staProtocol.isLoading() | 
 |  |  |                         && staProtocol.isInEnable() | 
 |  |  |                         && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999) | 
 |  |  |                         && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990) | 
 |  |  |                         && staProtocol.isPakMk()){// && !Cools.isEmpty(barcode)) { | 
 |  |  |  | 
 |  |  | //                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) { | 
 |  |  | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  | //                // 入出库模式判断 | 
 |  |  | //                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; } | 
 |  |  |                 if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; } | 
 |  |  |  | 
 |  |  |                 // 判断是否满足入库条件 | 
 |  |  |                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() | 
 |  |  |                         && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999) | 
 |  |  |                         && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990) | 
 |  |  |                         && staProtocol.isPakMk()) { | 
 |  |  |                     // 判断重复工作档 | 
 |  |  |                     WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo()); | 
 |  |  | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             //堆垛机回原点任务中 | 
 |  |  |             if(crnThread.isBackHpFlag()){ | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  | //            //堆垛机回原点任务中 | 
 |  |  | //            if(crnThread.isBackHpFlag()){ | 
 |  |  | //                continue; | 
 |  |  | //            } | 
 |  |  |  | 
 |  |  |             // 只有当堆垛机空闲 并且 无任务时才继续执行 | 
 |  |  |             if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO | 
 |  |  | 
 |  |  |  | 
 |  |  | //            // 入出库模式判断 | 
 |  |  | //            if (devpThread.ioMode != IoModeType.PAKOUT_MODE) { continue; } | 
 |  |  | //                if (wrkMast.getStaNo() == 204 && devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) {continue;} | 
 |  |  | //                if (wrkMast.getStaNo() == 402 && devpThread.ioModeOf4F != IoModeType.PAKOUT_MODE) {continue;} | 
 |  |  |  | 
 |  |  |                 // 查询站点详细信息 | 
 |  |  |                 BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); | 
 |  |  | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                         } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { | 
 |  |  |                             WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); | 
 |  |  | //                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); | 
 |  |  |                             //2022-08-16 modify,不根据updmk标记移库任务(容易被取消导致堵塞),查询工作档是否存在任务 | 
 |  |  |                             WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo); | 
 |  |  |                             // 此标记避免多次执行移库任务 | 
 |  |  |                             if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk()) | 
 |  |  |                                 || Cools.isEmpty(waitWrkMast)) { | 
 |  |  | //                            if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk()) | 
 |  |  | //                                || Cools.isEmpty(waitWrkMast)) { | 
 |  |  |                             if (Cools.isEmpty(waitWrkMast)) { | 
 |  |  |                                 wrkMast.setUpdMk("Y"); | 
 |  |  |                                 wrkMastMapper.updateById(wrkMast); | 
 |  |  |                                 // 生成工作档,将浅库位移转到新的库位中 | 
 |  |  |                                 moveLocForDeepLoc(slave, shallowLoc); | 
 |  |  |                             } | 
 |  |  |                             log.error("{}任务出库失败,浅库位堵塞!", wrkMast.getWrkNo()); | 
 |  |  |                             log.error("{}任务出库失败,浅库位堵塞!浅库位号:{}", wrkMast.getWrkNo(),shallowLocNo); | 
 |  |  |                             continue; | 
 |  |  |                         } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")){ | 
 |  |  |                             WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); | 
 |  |  | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  | //                // 入出库模式判断 | 
 |  |  | //                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; } | 
 |  |  | //                if ( emptyInSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; } | 
 |  |  |                 if ( emptyInSta.getStaNo()==203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) { continue; } | 
 |  |  |  | 
 |  |  |                 // 站点条件判断 | 
 |  |  |                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() | 
 |  |  | 
 |  |  |                 } | 
 |  |  |                 // 获取工作档数据 | 
 |  |  |                 WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo()); | 
 |  |  |                 if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; } | 
 |  |  | //                if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; } | 
 |  |  |                 if (null == wrkMast) { continue; } | 
 |  |  |                 wrkMasts.add(wrkMast); | 
 |  |  |                 // 组装命令 | 
 |  |  |                 LedCommand ledCommand = new LedCommand(); | 
 |  |  |                 ledCommand.setWorkNo(wrkMast.getWrkNo()); | 
 |  |  |                 ledCommand.setIoType(wrkMast.getIoType()); | 
 |  |  |                 // 出库模式 | 
 |  |  |                 switch (wrkMast.getIoType()) { | 
 |  |  |                     case 1: | 
 |  |  |                         ledCommand.setTitle("全板入库"); | 
 |  |  |                         break; | 
 |  |  |                     case 10: | 
 |  |  |                         ledCommand.setTitle("空板入库"); | 
 |  |  |                         break; | 
 |  |  |                     case 101: | 
 |  |  |                         ledCommand.setTitle("全板出库"); | 
 |  |  |                         break; | 
 |  |  | 
 |  |  |                         break; | 
 |  |  |                 } | 
 |  |  |                 ledCommand.setSourceLocNo(wrkMast.getSourceLocNo()); | 
 |  |  |                 ledCommand.setLocNo(wrkMast.getLocNo()); | 
 |  |  |                 ledCommand.setStaNo(wrkMast.getStaNo()); | 
 |  |  |                 if (wrkMast.getIoType() != 110) { | 
 |  |  | //                ledCommand.setSourceStaNo(wrkMast.getSourceStaNo()); | 
 |  |  |                 if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10 ) { | 
 |  |  |                     List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo()); | 
 |  |  |                     wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatNo(), wrkDetl.getMatName(), wrkDetl.getQty()))); | 
 |  |  |                     wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme()))); | 
 |  |  |                 } | 
 |  |  |                 commands.add(ledCommand); | 
 |  |  |             } | 
 |  |  | 
 |  |  |             } | 
 |  |  |             // 命令下发 ------------------------------------------------------------------------------- | 
 |  |  |             if (!commands.isEmpty()) { | 
 |  |  |                 if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) { | 
 |  |  |                     log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); | 
 |  |  |                     continue; | 
 |  |  |                 if (led.getId() == 7) { | 
 |  |  |                     if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) { | 
 |  |  |                         log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); | 
 |  |  |                         continue; | 
 |  |  |                     } else { | 
 |  |  |                         ledThread.setLedMk(false); | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  |                     ledThread.setLedMk(false); | 
 |  |  |                     if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) { | 
 |  |  |                         log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); | 
 |  |  |                         continue; | 
 |  |  |                     } else { | 
 |  |  |                         ledThread.setLedMk(false); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             try { | 
 |  |  | 
 |  |  |                 if (staProtocol == null) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.getWorkNo() != 0) { | 
 |  |  |                 if (staProtocol.getWorkNo() != 0 && staProtocol.isLoading()) { | 
 |  |  |                     reset = false; | 
 |  |  |                     break; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             // 获取led线程 | 
 |  |  |             LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getDevpPlcId()); | 
 |  |  |             LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); | 
 |  |  |             // led显示默认内容 | 
 |  |  |             if (reset && !ledThread.isLedMk()) { | 
 |  |  |                 ledThread.setLedMk(true); | 
 |  |  |                 if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) { | 
 |  |  |                     log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); | 
 |  |  |                 } else { | 
 |  |  |                 if (led.getId() == 7) { | 
 |  |  |                     ledThread.setLedMk(true); | 
 |  |  |                     if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) { | 
 |  |  |                         log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); | 
 |  |  |                     } else { | 
 |  |  |  | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  |                     ledThread.setLedMk(true); | 
 |  |  |                     if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) { | 
 |  |  |                         log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); | 
 |  |  |                     } else { | 
 |  |  |  | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  | 
 |  |  |                 WrkDetl wrkDetl = new WrkDetl(); | 
 |  |  |                 wrkDetl.setWrkNo(workNo); | 
 |  |  |                 wrkDetl.setIoTime(now); | 
 |  |  |                 wrkDetl.setQty(locDetl.getQty()); | 
 |  |  |                 wrkDetl.setAnfme(locDetl.getAnfme()); | 
 |  |  |                 VersionUtils.setWrkDetl(wrkDetl, locDetl); // 版本控制 | 
 |  |  |                 wrkDetl.setAppeTime(now); | 
 |  |  |                 wrkDetl.setModiTime(now); | 
 |  |  | 
 |  |  |                     WrkDetl wrkDetl = new WrkDetl(); | 
 |  |  |                     wrkDetl.setWrkNo(workNo); | 
 |  |  |                     wrkDetl.setIoTime(new Date()); | 
 |  |  |                     wrkDetl.setQty(locDetl.getQty()); | 
 |  |  |                     wrkDetl.setAnfme(locDetl.getAnfme()); | 
 |  |  |                     VersionUtils.setWrkDetl(wrkDetl, locDetl); // 版本控制 | 
 |  |  |                     wrkDetl.setAppeTime(new Date()); | 
 |  |  |                     wrkDetl.setModiTime(new Date()); | 
 |  |  | 
 |  |  |             for (DevpSlave devp : slaveProperties.getDevp()) { | 
 |  |  |                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
 |  |  |  | 
 |  |  |                 WrkMast pakout = wrkMastMapper.selectWorkingPakout(); | 
 |  |  |                 if (pakout != null) { | 
 |  |  |                     if (devpThread.ioMode != IoModeType.PAKOUT_MODE) { | 
 |  |  |                         // 出库切换中 | 
 |  |  |                         devpThread.ioMode = IoModeType.PAKOUT_BOOTING; | 
 |  |  |  | 
 |  |  |                         WrkMast pakin = wrkMastMapper.selectWorkingPakin(); | 
 |  |  |                         if (pakin == null) { | 
 |  |  |                             // 出库模式 | 
 |  |  |                             devpThread.ioMode = IoModeType.PAKOUT_MODE; | 
 |  |  |                         } | 
 |  |  |                 for (DevpSlave.Sta inSta : devp.getInSta()) { | 
 |  |  |                     if (inSta.getStaNo() == 2) { | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  |                     // 入库模式 | 
 |  |  |                     devpThread.ioMode = IoModeType.PAKIN_MODE; | 
 |  |  |                     WrkMast pakout = wrkMastMapper.selectWorkingPakout(inSta.getStaNo()); | 
 |  |  |                     switch (inSta.getStaNo()) { | 
 |  |  |                         case 203://1F | 
 |  |  |                             if (pakout != null) { | 
 |  |  |                                 if (devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) { | 
 |  |  |                                     // 出库切换中 | 
 |  |  |                                     devpThread.ioModeOf2F = IoModeType.PAKOUT_BOOTING; | 
 |  |  |                                     WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo()); | 
 |  |  |                                     if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() | 
 |  |  |                                             && !devpThread.getStation().get(inSta.getStaNo()+1).isLoading() | 
 |  |  |                                             && devpThread.getStation().get(inSta.getStaNo()+1).getWorkNo()==0) { | 
 |  |  |                                         // 出库模式 | 
 |  |  |                                         devpThread.ioModeOf2F = IoModeType.PAKOUT_MODE; | 
 |  |  |                                     } | 
 |  |  |                                 } | 
 |  |  |                             } else { | 
 |  |  |                                 // 入库模式 | 
 |  |  |                                 devpThread.ioModeOf2F = IoModeType.PAKIN_MODE; | 
 |  |  |                             } | 
 |  |  |                             break; | 
 |  |  |                         case 401://1F | 
 |  |  |                             if (pakout != null) { | 
 |  |  |                                 if (devpThread.ioModeOf4F != IoModeType.PAKOUT_MODE) { | 
 |  |  |                                     // 出库切换中 | 
 |  |  |                                     devpThread.ioModeOf4F = IoModeType.PAKOUT_BOOTING; | 
 |  |  |                                     WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo()); | 
 |  |  |                                     if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() | 
 |  |  |                                             && !devpThread.getStation().get(inSta.getStaNo()+1).isLoading() | 
 |  |  |                                             && devpThread.getStation().get(inSta.getStaNo()+1).getWorkNo()==0) { | 
 |  |  |                                         // 出库模式 | 
 |  |  |                                         devpThread.ioModeOf4F = IoModeType.PAKOUT_MODE; | 
 |  |  |                                     } | 
 |  |  |                                 } | 
 |  |  |                             } else { | 
 |  |  |                                 // 入库模式 | 
 |  |  |                                 devpThread.ioModeOf4F = IoModeType.PAKIN_MODE; | 
 |  |  |                             } | 
 |  |  |                             break; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         } catch (Exception e) { |