|  |  |  | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 判断是否满足入库条件 | 
|---|
|  |  |  | if (staProtocol.isAutoing() && staProtocol.isLoading() | 
|---|
|  |  |  | && staProtocol.isInEnable() | 
|---|
|  |  |  | if (!staProtocol.isAutoing()){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (staProtocol.isLoading() && staProtocol.isInEnable() | 
|---|
|  |  |  | && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990) | 
|---|
|  |  |  | && staProtocol.isPakMk() && staProtocol.getStamp()>=2) {// && !Cools.isEmpty(barcode)) { | 
|---|
|  |  |  | News.warn(""+mark+" - 0"+" - 开始执行"); | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 0"+" - 开始执行"); | 
|---|
|  |  |  | //                    try { | 
|---|
|  |  |  | //                        Thread.sleep(300); | 
|---|
|  |  |  | //                    }catch (Exception e){} | 
|---|
|  |  |  | 
|---|
|  |  |  | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | News.errorNoLog(""+mark+" - 6"+" - 站点信息不符合入库条件!!!"+" 自动信号:"+staProtocol.isLoading()+"、可入信号:" + staProtocol.isInEnable() | 
|---|
|  |  |  | +"、空板信号:"+ staProtocol.isEmptyMk()+"、工作号:" + staProtocol.getWorkNo() | 
|---|
|  |  |  | +"、锁定标记"+ staProtocol.isPakMk()+"、入库印记:" + staProtocol.getStamp()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | News.info(""+mark+" - 0"+" - 执行完成"); | 
|---|
|  |  |  | News.infoNoLog(""+mark+" - 0"+" - 执行完成"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | * 入库站,根据条码扫描生成入库工作档,工作状态 1 ==>> 2 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void generateStoreWrkFile0(Integer mark) { | 
|---|
|  |  |  | News.warn(""+mark+" - 0"+" - 开始执行"); | 
|---|
|  |  |  | // 根据输送线plc遍历 | 
|---|
|  |  |  | for (DevpSlave devp : slaveProperties.getDevp()) { | 
|---|
|  |  |  | // 遍历入库口 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 判断是否满足入库条件 | 
|---|
|  |  |  | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() | 
|---|
|  |  |  | if (!staProtocol.isLoading()){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (staProtocol.isAutoing() && staProtocol.isInEnable() | 
|---|
|  |  |  | && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999) | 
|---|
|  |  |  | && staProtocol.isPakMk()) { | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 0"+" - 开始执行"); | 
|---|
|  |  |  | // 判断重复工作档 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo()); | 
|---|
|  |  |  | if (wrkMast == null) { | 
|---|
|  |  |  | 
|---|
|  |  |  | News.error(""+mark+" - 2"+" - 发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | News.errorNoLog(""+mark+" - 6"+" - 站点信息不符合入库条件!!!"+" 自动信号:"+staProtocol.isLoading()+"、可入信号:" + staProtocol.isInEnable() | 
|---|
|  |  |  | +"、空板信号:"+ staProtocol.isEmptyMk()+"、工作号:" + staProtocol.getWorkNo() | 
|---|
|  |  |  | +"、锁定标记"+ staProtocol.isPakMk()+"、入库印记:" + staProtocol.getStamp()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | News.info(""+mark+" - 0"+" - 执行完成"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | News.infoNoLog(""+mark+" - 0"+" - 执行完成"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | * 拣料、并板、盘点再入库 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void stnToCrnStnPick(Integer mark) { | 
|---|
|  |  |  | News.warn(""+mark+" - 0"+" - 开始执行"); | 
|---|
|  |  |  | for (DevpSlave devp : slaveProperties.getDevp()) { | 
|---|
|  |  |  | // 遍历拣料入库口 | 
|---|
|  |  |  | for (DevpSlave.Sta pickSta : devp.getPickSta()) { | 
|---|
|  |  |  | 
|---|
|  |  |  | //                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) { | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 0"+" - 开始执行"); | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode); | 
|---|
|  |  |  | //                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue()); | 
|---|
|  |  |  | if (wrkMast == null) { | 
|---|
|  |  |  | 
|---|
|  |  |  | News.error(""+mark+" - 3"+" - 发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | News.errorNoLog(""+mark+" - 6"+" - 站点信息不符合入库条件!!!"+" 自动信号:"+staProtocol.isLoading()+"、可入信号:" + staProtocol.isInEnable() | 
|---|
|  |  |  | +"、空板信号:"+ staProtocol.isEmptyMk()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | News.info(""+mark+" - 0"+" - 执行完成"); | 
|---|
|  |  |  | News.infoNoLog(""+mark+" - 0"+" - 执行完成"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 堆垛机站出库到出库站 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void crnStnToOutStn(Integer mark) { | 
|---|
|  |  |  | News.warn(""+mark+" - 0"+" - 开始执行"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for (CrnSlave crnSlave : slaveProperties.getCrn()) { | 
|---|
|  |  |  | // 遍历堆垛机出库站 | 
|---|
|  |  |  | for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) { | 
|---|
|  |  |  | 
|---|
|  |  |  | if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue()) | 
|---|
|  |  |  | && crnProtocol.statusType == CrnStatusType.WAITING | 
|---|
|  |  |  | && crnProtocol.forkPosType == CrnForkPosType.HOME) { | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 0"+" - 开始执行"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | News.error(""+mark+" - 1"+" - 更新工作档的工作状态为14失败!!! [工作号:{}]", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | News.errorNoLog(""+mark+" - 6"+" - 堆垛机信息不符合入库条件!!!" | 
|---|
|  |  |  | +" 堆垛机状态:"+crnProtocol.modeType+"==自动AUTO:" + CrnModeType.AUTO | 
|---|
|  |  |  | +"、堆垛机任务号:"+crnProtocol.getTaskNo()+"==工作档任务号:" + wrkMast.getWrkNo().shortValue() | 
|---|
|  |  |  | +"、状态枚举:"+crnProtocol.statusType+"==WAITING:90 //任务完成等待WCS确认):" + CrnStatusType.WAITING | 
|---|
|  |  |  | +"、货叉位置:"+crnProtocol.forkPosType+"==HOME:0  // 货叉原位:" + CrnForkPosType.HOME); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | News.info(""+mark+" - 0"+" - 执行完成"); | 
|---|
|  |  |  | News.infoNoLog(""+mark+" - 0"+" - 执行完成"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 入出库  ===>>  堆垛机入出库作业下发 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void crnIoExecute(Integer mark) { | 
|---|
|  |  |  | News.warn(""+mark+" - 0"+" - 开始执行"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for (CrnSlave crn : slaveProperties.getCrn()) { | 
|---|
|  |  |  | // 获取堆垛机信息 | 
|---|
|  |  |  | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); | 
|---|
|  |  |  | 
|---|
|  |  |  | // 只有当堆垛机空闲 并且 无任务时才继续执行 | 
|---|
|  |  |  | if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO | 
|---|
|  |  |  | && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) { | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 0"+" - 开始执行堆垛机入出库作业下发"); | 
|---|
|  |  |  | // 如果最近一次是入库模式 | 
|---|
|  |  |  | if (crnProtocol.getLastIo().equals("I")) { | 
|---|
|  |  |  | if (basCrnp.getInEnable().equals("Y")) { | 
|---|
|  |  |  | this.crnStnToLoc(crn, crnProtocol); //  入库 | 
|---|
|  |  |  | //mark - 1 - .... | 
|---|
|  |  |  | this.crnStnToLoc(crn, crnProtocol,mark); //  入库 | 
|---|
|  |  |  | crnProtocol.setLastIo("O"); | 
|---|
|  |  |  | } else if (basCrnp.getOutEnable().equals("Y")) { | 
|---|
|  |  |  | this.locToCrnStn(crn, crnProtocol); //  出库 | 
|---|
|  |  |  | //mark - 2 - .... | 
|---|
|  |  |  | this.locToCrnStn(crn, crnProtocol,mark); //  出库 | 
|---|
|  |  |  | crnProtocol.setLastIo("I"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 如果最近一次是出库模式 | 
|---|
|  |  |  | else if (crnProtocol.getLastIo().equals("O")) { | 
|---|
|  |  |  | if (basCrnp.getOutEnable().equals("Y")) { | 
|---|
|  |  |  | this.locToCrnStn(crn, crnProtocol); //  出库 | 
|---|
|  |  |  | this.locToCrnStn(crn, crnProtocol,mark); //  出库 | 
|---|
|  |  |  | crnProtocol.setLastIo("I"); | 
|---|
|  |  |  | } else if (basCrnp.getInEnable().equals("Y")) { | 
|---|
|  |  |  | this.crnStnToLoc(crn, crnProtocol); //  入库 | 
|---|
|  |  |  | this.crnStnToLoc(crn, crnProtocol,mark); //  入库 | 
|---|
|  |  |  | crnProtocol.setLastIo("O"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | //            this.crnRebackHp(crnProtocol, crnThread); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | News.info(""+mark+" - 0"+" - 执行完成"); | 
|---|
|  |  |  | News.infoNoLog(""+mark+" - 0"+" - 堆垛机入出库作业下发执行完成"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 入库  ===>>  堆垛机站到库位 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol) { | 
|---|
|  |  |  | public synchronized void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol,Integer mark) { | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 1"+" - 堆垛机入出库作业下发:执行入库"); | 
|---|
|  |  |  | for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) { | 
|---|
|  |  |  | boolean flag = false; | 
|---|
|  |  |  | // 获取堆垛机入库站信息 | 
|---|
|  |  |  | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | News.infoNoLog(""+mark+" - 1"+" - 1"+" - 堆垛机入库站信息(staProtocol!=null继续执行):staProtocol="+staProtocol); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | 
|---|
|  |  |  | // 查询站点详细信息 | 
|---|
|  |  |  | BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); | 
|---|
|  |  |  | if (staDetl == null) { | 
|---|
|  |  |  | News.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo()); | 
|---|
|  |  |  | News.error(""+mark+" - 1"+" - 2"+" - 入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable() | 
|---|
|  |  |  | 
|---|
|  |  |  | flag = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!flag) { | 
|---|
|  |  |  | News.errorNoLog(""+mark+" - 1"+" - 3"+" - 堆垛机入库站信息(以下需要全true):" | 
|---|
|  |  |  | +"自动信号"+staProtocol.isAutoing()+"有物信号"+staProtocol.isLoading() | 
|---|
|  |  |  | +"工作号>0"+staProtocol.getWorkNo()+"可入信号"+staProtocol.isInEnable() | 
|---|
|  |  |  | +"能入信号(wms设置).equals(\"Y\")"+staDetl.getCanining()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 获取工作状态为2(设备上走)的入库工作档 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo()); | 
|---|
|  |  |  | if (null == wrkMast) { | 
|---|
|  |  |  | News.infoNoLog(""+mark+" - 1"+" - 4"+" - 查询无待入库数据--wrk_sts=2, 工作号={}", staProtocol.getWorkNo()); | 
|---|
|  |  |  | //                log.error("查询无待入库数据--wrk_sts=2, 工作号={}", staProtocol.getWorkNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 获取库位信息 | 
|---|
|  |  |  | LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); | 
|---|
|  |  |  | if (locMast == null) { | 
|---|
|  |  |  | News.error("查询库存无数据--库位号{}", wrkMast.getLocNo()); | 
|---|
|  |  |  | News.error(""+mark+" - 1"+" - 5"+" - 查询库存无数据--库位号{}", wrkMast.getLocNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) { | 
|---|
|  |  |  | News.error("入库操作库位状态不符合--状态, 库位号={},库位状态={}", wrkMast.getLocNo(), locMast.getLocSts()); | 
|---|
|  |  |  | News.error(""+mark+" - 1"+" - 6"+" - 入库操作库位状态不符合--状态, 库位号={},库位状态={}", wrkMast.getLocNo(), locMast.getLocSts()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 堆垛机控制过滤 | 
|---|
|  |  |  | if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { | 
|---|
|  |  |  | //                News.infoNoLog(""+mark+" - 1"+" - 7"+" - 堆垛机控制过滤:堆垛机是否空闲={},任务号={}", crnProtocol.getStatusType(),crnProtocol.getTaskNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 双深库位且浅库位有货,则需先对浅库位进行库位移转 | 
|---|
|  |  |  | if (Utils.isDeepLoc(slaveProperties, wrkMast.getLocNo())) { | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 1"+" - 8"+" - 双深库位且浅库位有货,则需先对浅库位进行库位移转 : 开始执行 任务号={}",wrkMast.getWrkNo()); | 
|---|
|  |  |  | String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getLocNo()); | 
|---|
|  |  |  | LocMast shallowLoc = locMastService.selectById(shallowLocNo); | 
|---|
|  |  |  | // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬! | 
|---|
|  |  |  | if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) { | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 1"+" - 9"+" - // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!库位状态={}",shallowLoc.getLocSts()); | 
|---|
|  |  |  | WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); | 
|---|
|  |  |  | if (null == waitWrkMast) { | 
|---|
|  |  |  | News.error("{}库位异常,未检索到相应工作档!", shallowLocNo); | 
|---|
|  |  |  | News.error(""+mark+" - 1"+" - 10"+" - {}库位异常,未检索到相应工作档!", shallowLocNo); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | waitWrkMast.setIoPri(15D); | 
|---|
|  |  |  | waitWrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | if (wrkMastMapper.updateById(waitWrkMast) == 0) { | 
|---|
|  |  |  | News.error("调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo()); | 
|---|
|  |  |  | News.error(""+mark+" - 1"+" - 11"+" - 调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 1"+" - 12"+" - // F、D  库位状态={}",shallowLoc.getLocSts()); | 
|---|
|  |  |  | // 此标记避免多次执行移库任务 | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) { | 
|---|
|  |  |  | wrkMast.setUpdMk("Y"); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else if (shallowLoc.getLocSts().equals("Q")) { | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 1"+" - 13"+" - // Q  库位状态={}",shallowLoc.getLocSts()); | 
|---|
|  |  |  | WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); | 
|---|
|  |  |  | if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) { | 
|---|
|  |  |  | News.infoNoLog(""+mark+" - 1"+" - 14"+" - // F、D  工作状态(判断条件为==4)={}",waitWrkMast.getWrkSts()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 1"+" - 15"+" - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}",wrkMast.getWrkNo().shortValue() | 
|---|
|  |  |  | ,crnStn.getRow().shortValue(),crnStn.getBay().shortValue(),crnStn.getLev().shortValue() | 
|---|
|  |  |  | ,locMast.getRow1().shortValue(),locMast.getBay1().shortValue(),locMast.getLev1().shortValue()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | CrnCommand crnCommand = new CrnCommand(); | 
|---|
|  |  |  | 
|---|
|  |  |  | crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 目标库位列 | 
|---|
|  |  |  | crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 目标库位层 | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { | 
|---|
|  |  |  | News.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); | 
|---|
|  |  |  | News.error(""+mark+" - 1"+" - 16"+" - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //                long startTime = System.currentTimeMillis(); | 
|---|
|  |  |  | 
|---|
|  |  |  | wrkMast.setCrnStrTime(now); | 
|---|
|  |  |  | wrkMast.setModiTime(now); | 
|---|
|  |  |  | if (wrkMastMapper.updateById(wrkMast) == 0) { | 
|---|
|  |  |  | News.error("修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,工作号={}", wrkMast.getWrkNo()); | 
|---|
|  |  |  | News.error(""+mark+" - 1"+" - 17"+" - 修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,工作号={}", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | News.infoNoLog(""+mark+" - 1"+" - 0"+" - 堆垛机入出库作业下发 : 入库执行完毕"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 出库  ===>>  库位到堆垛机站 | 
|---|
|  |  |  | * 2022-06-09 TQS修改,查询工作档LIST,遍历下发,防止第一个任务堵塞出库 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol) { | 
|---|
|  |  |  | public synchronized void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol,Integer mark) { | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 2"+" - 堆垛机入出库作业下发:执行出库"); | 
|---|
|  |  |  | for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) { | 
|---|
|  |  |  | // 获取工作状态为11(生成出库ID)的出库工作档 | 
|---|
|  |  |  | //            WrkMast wrkMast = wrkMastMapper.selectPakOutStep1(slave.getId(), crnStn.getStaNo()); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 工作档状态判断 | 
|---|
|  |  |  | if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null) { | 
|---|
|  |  |  | News.error("查询工作档数据不符合条件--入出类型/站点, 工作号={},源库位={},入出类型={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType()); | 
|---|
|  |  |  | News.error(""+mark+" - 2"+" - 1"+" - 查询工作档数据不符合条件--入出类型/站点, 工作号={},源库位={},入出类型={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 获取源库位信息 | 
|---|
|  |  |  | LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo()); | 
|---|
|  |  |  | if (!sourceSta.getLocSts().equals("R") && !sourceSta.getLocSts().equals("P")) { | 
|---|
|  |  |  | News.error("出库操作库位状态不符合--状态, 库位号={},库位状态={}", wrkMast.getLocNo(), sourceSta.getLocSts()); | 
|---|
|  |  |  | News.error(""+mark+" - 2"+" - 2"+" - 出库操作库位状态不符合--状态, 库位号={},库位状态={}", wrkMast.getLocNo(), sourceSta.getLocSts()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 获取堆垛机出库站信息 | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | News.infoNoLog(""+mark+" - 2"+" - 3"+" - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol="+staProtocol); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | //                    continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //            // 入出库模式判断 | 
|---|
|  |  |  | //            if (devpThread.ioMode != IoModeType.PAKOUT_MODE) { continue; } | 
|---|
|  |  |  | if (wrkMast.getStaNo() == 204 && devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //                if (wrkMast.getStaNo() == 204 && devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | //                    News.infoNoLog(""+mark+" - 2"+" - 4"+" - 入出库模式(此处出库方法,出库模式继续=="+devpThread.ioModeOf2F); | 
|---|
|  |  |  | //                    continue; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 查询站点详细信息 | 
|---|
|  |  |  | BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); | 
|---|
|  |  |  | if (staDetl == null) { | 
|---|
|  |  |  | News.error("出库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo()); | 
|---|
|  |  |  | News.error(""+mark+" - 2"+" - 5"+" - 出库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo()); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | //                    continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 双深库位且浅库位有货,则需先对浅库位进行库位移转 | 
|---|
|  |  |  | if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) { | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 2"+" - 6"+" - 双深库位且浅库位有货,则需先对浅库位进行库位移转 : 开始执行 任务号={}",wrkMast.getWrkNo()); | 
|---|
|  |  |  | String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo()); | 
|---|
|  |  |  | LocMast shallowLoc = locMastService.selectById(shallowLocNo); | 
|---|
|  |  |  | // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬! | 
|---|
|  |  |  | if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) { | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 2"+" - 7"+" - // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!库位状态={}",shallowLoc.getLocSts()); | 
|---|
|  |  |  | WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); | 
|---|
|  |  |  | if (null == waitWrkMast) { | 
|---|
|  |  |  | News.error("{}库位异常,未检索到相应工作档!", shallowLocNo); | 
|---|
|  |  |  | 
|---|
|  |  |  | waitWrkMast.setIoPri(15D); | 
|---|
|  |  |  | waitWrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | if (wrkMastMapper.updateById(waitWrkMast) == 0) { | 
|---|
|  |  |  | News.error("调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo()); | 
|---|
|  |  |  | News.error(""+mark+" - 2"+" - 8"+" - 调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 2"+" - 9"+" - // F、D  库位状态={}",shallowLoc.getLocSts()); | 
|---|
|  |  |  | //                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); | 
|---|
|  |  |  | //2022-08-16 modify,不根据updmk标记移库任务(容易被取消导致堵塞),查询工作档是否存在任务 | 
|---|
|  |  |  | WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo); | 
|---|
|  |  |  | 
|---|
|  |  |  | News.error("{}任务出库失败,浅库位堵塞!浅库位号:{}", wrkMast.getWrkNo(), shallowLocNo); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) { | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 2"+" - 10"+" - // Q、S  库位状态={}",shallowLoc.getLocSts()); | 
|---|
|  |  |  | WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo); | 
|---|
|  |  |  | if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) { | 
|---|
|  |  |  | News.infoNoLog(""+mark+" - 2"+" - 11"+" - // F、D  工作状态(判断条件为==4)={}",waitWrkMast.getWrkSts()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | //                        return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 2"+" - 12"+" - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}",wrkMast.getWrkNo().shortValue() | 
|---|
|  |  |  | ,sourceSta.getRow1().shortValue(),sourceSta.getBay1().shortValue(),sourceSta.getLev1().shortValue() | 
|---|
|  |  |  | ,crnStn.getRow().shortValue(),crnStn.getBay().shortValue(),crnStn.getLev().shortValue()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 1.堆垛机开始移动 | 
|---|
|  |  |  | CrnCommand crnCommand = new CrnCommand(); | 
|---|
|  |  |  | 
|---|
|  |  |  | crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 目标库位列 | 
|---|
|  |  |  | crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 目标库位层 | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { | 
|---|
|  |  |  | News.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); | 
|---|
|  |  |  | News.error(""+mark+" - 2"+" - 13"+" - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 修改工作档状态 11.生成出库ID => 12.吊车出库中 | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | 
|---|
|  |  |  | wrkMast.setCrnStrTime(now); | 
|---|
|  |  |  | wrkMast.setModiTime(now); | 
|---|
|  |  |  | if (wrkMastMapper.updateById(wrkMast) == 0) { | 
|---|
|  |  |  | News.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo()); | 
|---|
|  |  |  | News.error(""+mark+" - 2"+" - 14"+" - 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | News.infoNoLog(""+mark+" - 2"+" - 0"+" - 堆垛机入出库作业下发 : 出库执行完毕"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    /** | 
|---|