|  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public synchronized void crn5InTask(){ | 
 |  |  |         for (CrnSlave crnSlave : slaveProperties.getCrn()) { | 
 |  |  |             if (crnSlave.getId() != 5){ | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |             // 获取堆垛机信息 | 
 |  |  |             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId()); | 
 |  |  |             CrnProtocol crnProtocol = crnThread.getCrnProtocol(); | 
 |  |  |             if (crnProtocol == null) { | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |             BasCrnp basCrnp = basCrnpService.selectById(crnSlave.getId()); | 
 |  |  |             if (basCrnp == null) { | 
 |  |  |                 log.error("{}号堆垛机尚未在数据库进行维护!", crnSlave.getId()); | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |             // 只有当堆垛机空闲 并且 无任务时才继续执行 | 
 |  |  |             if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO | 
 |  |  |                     && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) { | 
 |  |  |  | 
 |  |  |                 Crn5InTaskSta(crnSlave,crnProtocol); | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |     public void Crn5InTaskSta(CrnSlave slave, CrnProtocol crnProtocol){ | 
 |  |  |         // 遍历堆垛机出库站 | 
 |  |  |         for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) { | 
 |  |  |             // 获取堆垛机出库站信息 | 
 |  |  |             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); | 
 |  |  |             StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); | 
 |  |  |             if (staProtocol == null) { | 
 |  |  |                 continue; | 
 |  |  |             } else { | 
 |  |  |                 staProtocol = staProtocol.clone(); | 
 |  |  |             } | 
 |  |  |             if (staProtocol.isAutoing() | 
 |  |  |                     && staProtocol.isLoading() | 
 |  |  |                     && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) { | 
 |  |  |                 // 查询工作档 | 
 |  |  |                 WrkMast wrkMast = wrkMastMapper.selectCrn5Task2(staProtocol.getSiteId()); | 
 |  |  |                 if (wrkMast == null) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 // 查询站点详细信息 | 
 |  |  |                 BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); | 
 |  |  |                 if (staDetl == null) { | 
 |  |  |                     log.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo()); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 // 获取库位信息 | 
 |  |  |                 LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); | 
 |  |  |                 if (locMast == null) { | 
 |  |  |                     log.error("查询库存无数据--库位号{}", wrkMast.getLocNo()); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) { | 
 |  |  |                     log.error("入库操作库位状态不符合--状态, 库位号={},库位状态={}", wrkMast.getLocNo(), locMast.getLocSts()); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 // 堆垛机控制过滤 | 
 |  |  |                 if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable() | 
 |  |  |                         && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) { | 
 |  |  |  | 
 |  |  |                     // 命令下发区 -------------------------------------------------------------------------- | 
 |  |  |                     CrnCommand crnCommand = new CrnCommand(); | 
 |  |  |                     crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 | 
 |  |  |                     crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 | 
 |  |  |                     crnCommand.setAckFinish((short) 0);  // 任务完成确认位 | 
 |  |  |                     crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转 | 
 |  |  |                     crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位排 | 
 |  |  |                     crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 源库位列 | 
 |  |  |                     crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 源库位层 | 
 |  |  |                     crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 目标库位排 | 
 |  |  |                     crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 目标库位列 | 
 |  |  |                     crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 目标库位层 | 
 |  |  |                     crnCommand.setLocType1(locMast.getLocType1().shortValue());     // 货物类型 | 
 |  |  |                     if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { | 
 |  |  |                         log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); | 
 |  |  |                     } else { | 
 |  |  |                         // 修改工作档状态 2.设备上走 => 3.吊车入库中 | 
 |  |  |                         Date now = new Date(); | 
 |  |  |                         wrkMast.setWrkSts(3L); | 
 |  |  |                         wrkMast.setCrnStrTime(now); | 
 |  |  |                         wrkMast.setModiTime(now); | 
 |  |  |                         if (wrkMastMapper.updateById(wrkMast) == 0) { | 
 |  |  |                             log.error("修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,工作号={}", wrkMast.getWrkNo()); | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |