|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 组托 | 
|---|
|  |  |  | * 入库站,根据条码扫描通知桁架码垛 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void generateStoreWrkFileFull2LouM() { | 
|---|
|  |  |  | // 根据输送线plc遍历 | 
|---|
|  |  |  | for (DevpSlave devp : slaveProperties.getDevp()) { | 
|---|
|  |  |  | // 遍历码垛口 | 
|---|
|  |  |  | for (DevpSlave.Sta driveSta : devp.getDriveSta()) { | 
|---|
|  |  |  | // 获取条码扫描仪信息 | 
|---|
|  |  |  | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, driveSta.getBarcode()); | 
|---|
|  |  |  | if (barcodeThread == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String barcode = barcodeThread.getBarcode(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!Cools.isEmpty(barcode) && !barcode.equals("") && !barcode.equals("      ")) { | 
|---|
|  |  |  | if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 获取码垛口信息 | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(driveSta.getStaNo()); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 判断是否满足入库条件 | 
|---|
|  |  |  | if (staProtocol.isAutoing() | 
|---|
|  |  |  | && staProtocol.isLoading() | 
|---|
|  |  |  | && staProtocol.isInEnable() | 
|---|
|  |  |  | && staProtocol.isEmptyMk() | 
|---|
|  |  |  | && (staProtocol.getWorkNo() == 0 || (staProtocol.getWorkNo()>9899 && staProtocol.getWorkNo()<10000) ) | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | BasDevp basDevp = basDevpService.selectById(driveSta.getStaNo()); | 
|---|
|  |  |  | if (basDevp.getReportSign()>0){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | basDevp.setBarcode(barcode); | 
|---|
|  |  |  | basDevp.setReportSign(1); | 
|---|
|  |  |  | basDevpService.updateById(basDevp); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * wms入库 | 
|---|
|  |  |  | * 入库站,根据条码扫描生成入库工作档,工作状态 1 ==>> 2 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 2楼212呼叫空板 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void stnToCrnStnPick3Auto(Integer sign) { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(212); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.getWorkNo()==0 ){ | 
|---|
|  |  |  | switch (sign){ | 
|---|
|  |  |  | //执行小车货物搬运任务 | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | case 4: | 
|---|
|  |  |  | stnToCrnStnPick3(); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | //执行小车空板搬运任务 | 
|---|
|  |  |  | case 2://放//拆盘 | 
|---|
|  |  |  | case 5://放//拆盘 | 
|---|
|  |  |  | stnToCrnStnPick4(); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else if (staProtocol.isAutoing() && staProtocol.isLoading()){ | 
|---|
|  |  |  | switch (sign){ | 
|---|
|  |  |  | case 3://满放 | 
|---|
|  |  |  | case 6://满放 | 
|---|
|  |  |  | stnToCrnStnPick5(); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("2楼212呼叫空板"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 2楼212呼叫空板 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void stnToCrnStnPick3() { | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne212(); | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast) || wrkMast.getWrkSts()!=61){//61、等待空板 | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for (DevpSlave devp : slaveProperties.getDevp()) { | 
|---|
|  |  |  | for (DevpSlave.Sta driveSta : devp.getDriveSta()) { | 
|---|
|  |  |  | if (driveSta.getStaNo()!=215){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 获取拣料入库站信息 | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(driveSta.getStaNo()); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo()==0 | 
|---|
|  |  |  | || (staProtocol.getWorkNo()>9899 && staProtocol.getWorkNo()<10000)) ){ | 
|---|
|  |  |  | boolean result1 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkMast.getWrkNo()-1); | 
|---|
|  |  |  | staProtocol.setStaNo(driveSta.getStaNo()==215? 217:221); | 
|---|
|  |  |  | boolean result2 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | if (!result2) { | 
|---|
|  |  |  | log.error("发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | wrkMast.setWrkSts(62L); | 
|---|
|  |  |  | wrkMastMapper.updateById(wrkMast); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | boolean result3 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, staProtocol)); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 2楼212呼叫空板 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void stnToCrnStnPick4() { | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne212(); | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast) || wrkMast.getWrkSts()!=62){//62、等待小车搬运 | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for (DevpSlave devp : slaveProperties.getDevp()) { | 
|---|
|  |  |  | for (DevpSlave.Sta driveSta : devp.getInSta()) { | 
|---|
|  |  |  | if (driveSta.getStaNo()!=217){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 获取拣料入库站信息 | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(driveSta.getStaNo()); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | StaProtocol staProtocol212 = devpThread.getStation().get(212); | 
|---|
|  |  |  | if (staProtocol212 == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol212 = staProtocol212.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (staProtocol212.isAutoing() && !staProtocol212.isLoading() && staProtocol212.getWorkNo()==0){ | 
|---|
|  |  |  | if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo()==0 | 
|---|
|  |  |  | || (staProtocol.getWorkNo()>9899 && staProtocol.getWorkNo()<10000) || staProtocol.getWorkNo()==wrkMast.getWrkNo()-1) ){ | 
|---|
|  |  |  | //                        boolean result1 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkMast.getWrkNo()); | 
|---|
|  |  |  | staProtocol.setStaNo(212); | 
|---|
|  |  |  | boolean result2 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | if (!result2) { | 
|---|
|  |  |  | log.error("发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | wrkMast.setWrkSts(63L); | 
|---|
|  |  |  | wrkMastMapper.updateById(wrkMast); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //                        boolean result3 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, staProtocol)); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 2楼212呼叫空板 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void stnToCrnStnPick5() { | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne212(); | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast) || wrkMast.getWrkSts()!=63){//63、等待完成 | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 获取拣料入库站信息 | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(212); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (staProtocol.isAutoing() && staProtocol.isLoading()){ | 
|---|
|  |  |  | //            boolean result1 = MessageQueue.offer(SlaveType.Devp, 2, new Task(3, staProtocol)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wrkMast.setWrkSts(64L); | 
|---|
|  |  |  | wrkMastMapper.updateById(wrkMast); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //            boolean result3 = MessageQueue.offer(SlaveType.Devp, 2, new Task(4, staProtocol)); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 拣料、并板、盘点再入库  拆垛位置 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 搜索RGV车。通过目标站搜索哪台车可用 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized Integer searchRgvNo(Integer staNo) { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | BasDevp basDevp = basDevpService.selectById(staNo); | 
|---|
|  |  |  | if (basDevp == null) { | 
|---|
|  |  |  | return null;//目标站不存在 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //路径值 | 
|---|
|  |  |  | int path = basDevp.getLocType3().intValue(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ArrayList<RgvThread> list = new ArrayList<>(); | 
|---|
|  |  |  | for (RgvSlave rgv : slaveProperties.getRgv()) { | 
|---|
|  |  |  | // 获取RGV信息 | 
|---|
|  |  |  | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); | 
|---|
|  |  |  | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
|---|
|  |  |  | if (rgvProtocol == null) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BasRgv basRgv = basRgvService.selectById(rgv.getId()); | 
|---|
|  |  |  | if (basRgv == null) { | 
|---|
|  |  |  | log.error("{}号RGV尚未在数据库进行维护!", rgv.getId()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | list.add(rgvThread); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (list.size() > 1) { | 
|---|
|  |  |  | //超过两台车,按照配置的规则进行分配 | 
|---|
|  |  |  | for (RgvThread rgvThread : list) { | 
|---|
|  |  |  | //获取车辆配置的路径规则 | 
|---|
|  |  |  | BasRgvPath basRgvPath = basRgvPathService.selectByRgvNo(rgvThread.getSlave().getId()); | 
|---|
|  |  |  | if (basRgvPath == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //目标站是否包含当前路径中 | 
|---|
|  |  |  | List<Integer> rgvPath = JSON.parseArray(basRgvPath.getPath(), Integer.class); | 
|---|
|  |  |  | if (rgvPath.contains(path)) { | 
|---|
|  |  |  | //当前路径中包含目标站,则选定这台车 | 
|---|
|  |  |  | return rgvThread.getSlave().getId(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | //小于或等于1台车,分配全路径 | 
|---|
|  |  |  | BasRgvPath basRgvPath = basRgvPathService.selectByRgvNo(0);//获取默认路径 | 
|---|
|  |  |  | if (basRgvPath == null) { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<Integer> rgvPath = JSON.parseArray(basRgvPath.getPath(), Integer.class); | 
|---|
|  |  |  | if (rgvPath.contains(path)) { | 
|---|
|  |  |  | //当前路径中包含目标站,则选定这台车 | 
|---|
|  |  |  | return list.get(0).getSlave().getId(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("搜索RGV车。通过目标站搜索哪台车可用"+e); | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 回原点,堆垛机没有执行中任务,设备存在入库任务时叫回原点 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void crnRebackHp(CrnProtocol crnProtocol, CrnThread crnThread) { | 
|---|
|  |  |  | //        for (CrnSlave crn : slaveProperties.getCrn()) { | 
|---|
|  |  |  | //            // 获取堆垛机信息 | 
|---|
|  |  |  | //            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); | 
|---|
|  |  |  | //            CrnProtocol crnProtocol = crnThread.getCrnProtocol(); | 
|---|
|  |  |  | //            if (crnProtocol == null) { | 
|---|
|  |  |  | //                continue; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            BasCrnp basCrnp = basCrnpService.selectById(crn.getId()); | 
|---|
|  |  |  | //            if (basCrnp == null) { | 
|---|
|  |  |  | //                log.error("{}号堆垛机尚未在数据库进行维护!", crn.getId()); | 
|---|
|  |  |  | //                continue; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { | 
|---|
|  |  |  | if (crnProtocol.getBay() == 1 && crnProtocol.getLevel() == 1) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 已经存在吊车执行任务时,则过滤3,12 | 
|---|
|  |  |  | if (wrkMastMapper.selectWorking(crnProtocol.getCrnNo()) != null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //堆垛机有执行中任务,过滤3,4,11,12 | 
|---|
|  |  |  | if (wrkMastMapper.selectCrnWorking(crnProtocol.getCrnNo()) != null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //输送线没有入库任务,过滤2 | 
|---|
|  |  |  | if (wrkMastMapper.selectDevWorking(crnProtocol.getCrnNo()) == null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | log.info("堆垛机召回原点==>>" + crnProtocol.getCrnNo() + "号堆垛机有入库任务,召回原点"); | 
|---|
|  |  |  | // 命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | CrnCommand crnCommand = new CrnCommand(); | 
|---|
|  |  |  | crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 堆垛机编号 | 
|---|
|  |  |  | crnCommand.setTaskNo((short) 63333); // 工作号 | 
|---|
|  |  |  | crnCommand.setAckFinish((short) 0);  // 任务完成确认位 | 
|---|
|  |  |  | crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式:  回原点 | 
|---|
|  |  |  | crnCommand.setSourcePosX((short) 0);     // 源库位排 | 
|---|
|  |  |  | crnCommand.setSourcePosY((short) 0);     // 源库位列 | 
|---|
|  |  |  | crnCommand.setSourcePosZ((short) 0);     // 源库位层 | 
|---|
|  |  |  | crnCommand.setDestinationPosX((short) 0);     // 目标库位排 | 
|---|
|  |  |  | crnCommand.setDestinationPosY((short) 0);     // 目标库位列 | 
|---|
|  |  |  | crnCommand.setDestinationPosZ((short) 0);     // 目标库位层 | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, crnCommand))) { | 
|---|
|  |  |  | log.error("堆垛机回原点命令下发失败,堆垛机号={},任务数据={}", crnProtocol.getCrnNo(), JSON.toJSON(crnCommand)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | crnThread.setBackHpFlag(true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 入库  ===>>  堆垛机站到库位 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 查找工作状态为2(设备上走),且RGV入库接驳站符合的的入库工作档,提取出最多2笔 | 
|---|
|  |  |  | * @param slave | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized List<WrkMast> getRgvInTask(RgvSlave slave){ | 
|---|
|  |  |  | List<WrkMast> wrkMastTask = new ArrayList<>(); | 
|---|
|  |  |  | List<Integer> staNos = new ArrayList<>(); | 
|---|
|  |  |  | for (RgvSlave.RgvStn rgvStn : slave.getRgvInSStn()) { | 
|---|
|  |  |  | staNos.add(rgvStn.getStaNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(staNos.size() < 1){ | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<WrkMast> wrkMasts = wrkMastMapper.selectRgvInStep1(slave.getId(), staNos); | 
|---|
|  |  |  | for(WrkMast wrkMast : wrkMasts){ | 
|---|
|  |  |  | Integer plcId = 0; | 
|---|
|  |  |  | for (RgvSlave.RgvStn rgvStn : slave.getRgvInSStn()) { | 
|---|
|  |  |  | if(rgvStn.getStaNo() == wrkMast.getRgvSstaNo()){ | 
|---|
|  |  |  | plcId = rgvStn.getDevpPlcId(); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, plcId); | 
|---|
|  |  |  | //判断RGV入库源站点,自动、有物,有任务号,可出 | 
|---|
|  |  |  | boolean flag1 = false; | 
|---|
|  |  |  | StaProtocol staProtocol1 = devpThread.getStation().get(wrkMast.getRgvSstaNo()); | 
|---|
|  |  |  | if (staProtocol1 == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol1 = staProtocol1.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 查询站点详细信息 | 
|---|
|  |  |  | BasDevp staDetl1 = basDevpService.selectById(wrkMast.getRgvSstaNo()); | 
|---|
|  |  |  | if (staDetl1 == null) { | 
|---|
|  |  |  | log.error("RGV入库 ===>> 输送机源站点在数据库不存在, 站点编号={}", wrkMast.getRgvSstaNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (staProtocol1.isAutoing() && staProtocol1.isLoading() && staProtocol1.getWorkNo().intValue() == wrkMast.getWrkNo() | 
|---|
|  |  |  | && staProtocol1.isOutEnable() && staDetl1.getOutEnable() != null && staDetl1.getOutEnable().equals("Y")) { | 
|---|
|  |  |  | flag1 = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //判断RGV入库目标站点,自动、无物,没有任务号,可入 | 
|---|
|  |  |  | boolean flag2 = false; | 
|---|
|  |  |  | StaProtocol staProtocol2 = devpThread.getStation().get(wrkMast.getRgvDstaNo()); | 
|---|
|  |  |  | if (staProtocol2 == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol2 = staProtocol2.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 查询站点详细信息 | 
|---|
|  |  |  | BasDevp staDetl2 = basDevpService.selectById(wrkMast.getRgvSstaNo()); | 
|---|
|  |  |  | if (staDetl2 == null) { | 
|---|
|  |  |  | log.error("RGV入库 ===>> 输送机源站点在数据库不存在, 站点编号={}", wrkMast.getRgvSstaNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (staProtocol2.isAutoing() && staProtocol2.isLoading() && staProtocol2.getWorkNo().intValue() == wrkMast.getWrkNo() | 
|---|
|  |  |  | && staProtocol2.isInEnable() && staDetl2.getCanining() != null && staDetl2.getCanining().equals("Y")) { | 
|---|
|  |  |  | flag2 = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(flag1 && flag2){ | 
|---|
|  |  |  | wrkMastTask.add(wrkMast); | 
|---|
|  |  |  | if(wrkMastTask.size() >= 2) break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return wrkMastTask; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 查找工作状态为14(出库完成),且RGV出库接驳站符合的的出库工作档,提取出最多2笔 | 
|---|
|  |  |  | * @param slave | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized List<WrkMast> getRgvOutTask(RgvSlave slave){ | 
|---|
|  |  |  | List<WrkMast> wrkMastTask = new ArrayList<>(); | 
|---|
|  |  |  | List<Integer> staNos = new ArrayList<>(); | 
|---|
|  |  |  | for (RgvSlave.RgvStn rgvStn : slave.getRgvOutSStn()) { | 
|---|
|  |  |  | staNos.add(rgvStn.getStaNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(staNos.size() < 1){ | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<WrkMast> wrkMasts = wrkMastMapper.selectRgvOutStep1(slave.getId(), staNos); | 
|---|
|  |  |  | for(WrkMast wrkMast : wrkMasts){ | 
|---|
|  |  |  | Integer plcId = 0; | 
|---|
|  |  |  | for (RgvSlave.RgvStn rgvStn : slave.getRgvOutSStn()) { | 
|---|
|  |  |  | if(rgvStn.getStaNo() == wrkMast.getRgvSstaNo()){ | 
|---|
|  |  |  | plcId = rgvStn.getDevpPlcId(); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, plcId); | 
|---|
|  |  |  | //判断RGV出库源站点,自动、有物,有任务号,可出 | 
|---|
|  |  |  | boolean flag1 = false; | 
|---|
|  |  |  | StaProtocol staProtocol1 = devpThread.getStation().get(wrkMast.getRgvSstaNo()); | 
|---|
|  |  |  | if (staProtocol1 == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol1 = staProtocol1.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 查询站点详细信息 | 
|---|
|  |  |  | BasDevp staDetl1 = basDevpService.selectById(wrkMast.getRgvSstaNo()); | 
|---|
|  |  |  | if (staDetl1 == null) { | 
|---|
|  |  |  | log.error("RGV出库 ===>> 输送机源站点在数据库不存在, 站点编号={}", wrkMast.getRgvSstaNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (staProtocol1.isAutoing() && staProtocol1.isLoading() && staProtocol1.getWorkNo().intValue() == wrkMast.getWrkNo() | 
|---|
|  |  |  | && staProtocol1.isOutEnable() && staDetl1.getOutEnable() != null && staDetl1.getOutEnable().equals("Y")) { | 
|---|
|  |  |  | flag1 = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //判断RGV出库目标站点,自动、无物,没有任务号,可入 | 
|---|
|  |  |  | boolean flag2 = false; | 
|---|
|  |  |  | StaProtocol staProtocol2 = devpThread.getStation().get(wrkMast.getRgvDstaNo()); | 
|---|
|  |  |  | if (staProtocol2 == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol2 = staProtocol2.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 查询站点详细信息 | 
|---|
|  |  |  | BasDevp staDetl2 = basDevpService.selectById(wrkMast.getRgvSstaNo()); | 
|---|
|  |  |  | if (staDetl2 == null) { | 
|---|
|  |  |  | log.error("RGV出库 ===>> 输送机源站点在数据库不存在, 站点编号={}", wrkMast.getRgvSstaNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (staProtocol2.isAutoing() && staProtocol2.isLoading() && staProtocol2.getWorkNo().intValue() == wrkMast.getWrkNo() | 
|---|
|  |  |  | && staProtocol2.isInEnable() && staDetl2.getCanining() != null && staDetl2.getCanining().equals("Y")) { | 
|---|
|  |  |  | flag2 = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(flag1 && flag2){ | 
|---|
|  |  |  | wrkMastTask.add(wrkMast); | 
|---|
|  |  |  | if(wrkMastTask.size() >= 2) break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return wrkMastTask; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    /** | 
|---|
|  |  |  | //     * 初始化RGV地图 | 
|---|
|  |  |  | //     */ | 
|---|
|  |  |  | //    public synchronized void initRgvMap() { | 
|---|
|  |  |  | //        Object data = redisUtil.get("rgv_map"); | 
|---|
|  |  |  | //        if (data == null) { | 
|---|
|  |  |  | //            //重新获取全路径地图 | 
|---|
|  |  |  | //            BasRgvPath basRgvPath = basRgvPathService.selectByRgvNo(0);//获取默认路径 | 
|---|
|  |  |  | //            if (basRgvPath != null) { | 
|---|
|  |  |  | //                ArrayList<RgvNode> rgvNodes = new ArrayList<>(); | 
|---|
|  |  |  | //                List<Integer> rgvPath = JSON.parseArray(basRgvPath.getPath(), Integer.class); | 
|---|
|  |  |  | //                for (Integer integer : rgvPath) { | 
|---|
|  |  |  | //                    RgvNode rgvNode = new RgvNode(integer); | 
|---|
|  |  |  | //                    rgvNodes.add(rgvNode); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //                //将数据库地图数据存入redis | 
|---|
|  |  |  | //                redisUtil.set("rgv_map", JSON.toJSONString(rgvNodes)); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 堆垛机演示  ===>> 库位移转 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 
|---|
|  |  |  | log.error("堆垛机演示  ===>> 库位移转失败", e); | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 堆垛机命令下发后,异步修改工作档状态 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void crnIoWrkMast() { | 
|---|
|  |  |  | for (CrnSlave crn : slaveProperties.getCrn()) { | 
|---|
|  |  |  | // 获取堆垛机信息 | 
|---|
|  |  |  | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); | 
|---|
|  |  |  | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); | 
|---|
|  |  |  | if (crnProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | // 堆垛机正在运行 | 
|---|
|  |  |  | if (crnProtocol.getStatusType() != CrnStatusType.IDLE && crnProtocol.getTaskNo() != 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { | 
|---|
|  |  |  | // 获取工作档 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectById(crnProtocol.getTaskNo()); | 
|---|
|  |  |  | if (wrkMast == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 入库 | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 1 || wrkMast.getWrkSts() == 2) { | 
|---|
|  |  |  | log.warn("堆垛机非空闲情况下,开始修改工作档状态。[id:{},时间:{}] >>>>> 堆垛机当前状态为:{}。任务号:{}", crn.getId(), DateUtils.convert(now, DateUtils.yyyyMMddHHmmsssss_F), crnProtocol.getStatusType().desc, crnProtocol.getTaskNo()); | 
|---|
|  |  |  | // 修改工作档状态 2.设备上走 => 3.吊车入库中 | 
|---|
|  |  |  | wrkMast.setWrkSts(3L); | 
|---|
|  |  |  | wrkMast.setCrnStrTime(now); | 
|---|
|  |  |  | wrkMast.setModiTime(now); | 
|---|
|  |  |  | if (wrkMastMapper.updateById(wrkMast) == 0) { | 
|---|
|  |  |  | log.error("修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,工作号={}", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | log.warn("修改工作档状态成功。[时间:{}] >>>>> 任务号:{}", DateUtils.convert(now, DateUtils.yyyyMMddHHmmsssss_F), wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 出库、移库 | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 11) { | 
|---|
|  |  |  | log.warn("堆垛机非空闲情况下,开始修改工作档状态。[id:{},时间:{}] >>>>> 堆垛机当前状态为:{}。任务号:{}", crn.getId(), DateUtils.convert(now, DateUtils.yyyyMMddHHmmsssss_F), crnProtocol.getStatusType().desc, crnProtocol.getTaskNo()); | 
|---|
|  |  |  | // 修改工作档状态 11.生成出库ID => 12.吊车出库中 | 
|---|
|  |  |  | wrkMast.setWrkSts(12L); | 
|---|
|  |  |  | wrkMast.setCrnStrTime(now); | 
|---|
|  |  |  | wrkMast.setModiTime(now); | 
|---|
|  |  |  | if (wrkMastMapper.updateById(wrkMast) == 0) { | 
|---|
|  |  |  | log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | log.warn("修改工作档状态成功。[时间:{}] >>>>> 任务号:{}", DateUtils.convert(now, DateUtils.yyyyMMddHHmmsssss_F), wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 入出库模式切换函数 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void ioConvert() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 根据输送线plc遍历 | 
|---|
|  |  |  | for (DevpSlave devp : slaveProperties.getDevp()) { | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for (DevpSlave.Sta inSta : devp.getInSta()) { | 
|---|
|  |  |  | if (inSta.getStaNo() == 2) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 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) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    /** | 
|---|
|  |  |  | //     * 其他  ===>> 码垛位自动补充空板:驱动拆盘机输出托盘 | 
|---|
|  |  |  | //     */ | 
|---|
|  |  |  | //    public synchronized void dischargingMachineOutputTray() { | 
|---|
|  |  |  | //        try { | 
|---|
|  |  |  | //            List<WrkMast> wrkMasts = wrkMastMapper.selectDischargingMachineOutputTray(); | 
|---|
|  |  |  | //            if (Cools.isEmpty(wrkMasts) || wrkMasts.size()>3){ | 
|---|
|  |  |  | //                return; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            // 获取入库站信息 | 
|---|
|  |  |  | //            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
|---|
|  |  |  | //            StaProtocol staProtocol = devpThread.getStation().get(213); | 
|---|
|  |  |  | //            if (staProtocol == null) { | 
|---|
|  |  |  | //                log.error("码垛位自动补充空板:驱动拆盘机输出托盘,任务下发失败,站点查询失败"); | 
|---|
|  |  |  | //                return; | 
|---|
|  |  |  | //            } else { | 
|---|
|  |  |  | //                staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            if (!staProtocol.isLoading()){ | 
|---|
|  |  |  | //                log.info("码垛位自动补充空板:驱动拆盘机输出托盘,任务下发失败,站点无物,正在自动调出空板!"); | 
|---|
|  |  |  | //                int i = wrkMastMapper.selectConfigCount10468N(); | 
|---|
|  |  |  | //                if (i==1){ | 
|---|
|  |  |  | //                    wrkMastMapper.updateConfig10468Y(); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //                return; | 
|---|
|  |  |  | //            }else { | 
|---|
|  |  |  | //                int i = wrkMastMapper.selectConfigCount10468N(); | 
|---|
|  |  |  | //                if (i==0){ | 
|---|
|  |  |  | //                    return; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            StaProtocol staProtocol214 = devpThread.getStation().get(214); | 
|---|
|  |  |  | //            // 判断是否满足入库条件 | 
|---|
|  |  |  | //            if (staProtocol.isAutoing() && staProtocol.getWorkNo() == 0 && staProtocol.isPakMk() && staProtocol214.getWorkNo()==0) { | 
|---|
|  |  |  | //                staProtocol.setWorkNo((short)9999); | 
|---|
|  |  |  | //                staProtocol.setStaNo((short)214); | 
|---|
|  |  |  | //                devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | //                boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | //                if (!result) { | 
|---|
|  |  |  | //                    throw new CoolException("更新plc站点信息失败==>码垛位自动补充空板:驱动拆盘机输出托盘!"); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //                log.info("码垛位自动补充空板:驱动拆盘机输出托盘,任务下发成功:工作号9999、目标站214!"); | 
|---|
|  |  |  | //            }else { | 
|---|
|  |  |  | //                log.error("码垛位自动补充空板:驱动拆盘机输出托盘,任务下发失败,站点状态不符合!"); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //        }catch (Exception e){ | 
|---|
|  |  |  | //            e.printStackTrace(); | 
|---|
|  |  |  | //            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    /** | 
|---|
|  |  |  | //     * 其他  ===>> 拆盘机处空板扫码,驱动托盘向码垛位,不入库 | 
|---|
|  |  |  | //     */ | 
|---|
|  |  |  | //    public synchronized void scanBarcodeEmptyBoard() { | 
|---|
|  |  |  | //        try { | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //        }catch (Exception e){ | 
|---|
|  |  |  | //            e.printStackTrace(); | 
|---|
|  |  |  | //            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 其他  ===>> 码垛完成驱动托盘进入下一步(入库前扫码) | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void stackingCompletionDriveTray() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | int[] staNos=new int[]{215,219};//(2楼两个入库码垛站) | 
|---|
|  |  |  | for (int staNo : staNos){ | 
|---|
|  |  |  | BasDevp basDevp = basDevpService.selectById(staNo); | 
|---|
|  |  |  | if ((basDevp.getWrkNo()!=0 && (basDevp.getWrkNo()<9900 || basDevp.getWrkNo()>9999)) || Cools.isEmpty(basDevp.getBarcode())){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Integer zpallet = waitPakinMapper.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet", basDevp.getBarcode()).eq("status","N")); | 
|---|
|  |  |  | if (zpallet<=0){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 获取入库站信息 | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(staNo); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 入出库模式判断 | 
|---|
|  |  |  | //                if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; } | 
|---|
|  |  |  | //                if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | //                    continue; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!staProtocol.isLoading()){ | 
|---|
|  |  |  | log.info("{}站点无物,正在自动调出空板!",staNo); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 判断是否满足入库条件 | 
|---|
|  |  |  | if (staProtocol.isAutoing() | 
|---|
|  |  |  | && staProtocol.isLoading() | 
|---|
|  |  |  | && staProtocol.isInEnable() | 
|---|
|  |  |  | && !staProtocol.isEmptyMk() | 
|---|
|  |  |  | && (basDevp.getWrkNo()==0 || (basDevp.getWrkNo()>=9900 && basDevp.getWrkNo()<=9999)) | 
|---|
|  |  |  | ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) { | 
|---|
|  |  |  | int workNo = commonService.getWorkNo(5); | 
|---|
|  |  |  | staProtocol.setWorkNo(workNo); | 
|---|
|  |  |  | staProtocol.setStaNo(staNo + 2); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | throw new CoolException("更新plc站点信息失败==>驱动码垛位托盘前进失败!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | //            e.printStackTrace(); | 
|---|
|  |  |  | //            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | log.error("其他  ===>> 码垛完成驱动托盘进入下一步(入库前扫码)"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 其他  ===>> 码垛完成驱动托盘进入下一步 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void stackingCompletionDriveTray2() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | int[] staNos=new int[]{131,135};//(2个入库站点,1楼2个出库码垛站,根据现场修改) | 
|---|
|  |  |  | for (int staNo : staNos){ | 
|---|
|  |  |  | BasDevp basDevp = basDevpService.selectById(staNo); | 
|---|
|  |  |  | if (Cools.isEmpty(basDevp) || basDevp.getReportSign()!=1){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (basDevp.getWrkNo()!=0 && (basDevp.getWrkNo()<9900 || basDevp.getWrkNo()>9999)){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne202(staNo); | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast)){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 获取站点信息 | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(staNo); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 入出库模式判断 | 
|---|
|  |  |  | //                if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; } | 
|---|
|  |  |  | //                if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | //                    continue; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!staProtocol.isLoading()){ | 
|---|
|  |  |  | log.info("{}站点无物,异常!",staNo); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 判断是否满足入库条件 | 
|---|
|  |  |  | if (staProtocol.isAutoing() | 
|---|
|  |  |  | && staProtocol.isLoading() | 
|---|
|  |  |  | && staProtocol.isInEnable() | 
|---|
|  |  |  | && (staProtocol.getWorkNo() == 0 || (staProtocol.getWorkNo()>9899 && staProtocol.getWorkNo()<10000)) | 
|---|
|  |  |  | ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //任务完成 | 
|---|
|  |  |  | boolean result1 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(3, staProtocol)); | 
|---|
|  |  |  | Thread.sleep(100); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkMast.getWrkNo()); | 
|---|
|  |  |  | staProtocol.setStaNo(144); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | throw new CoolException("更新plc站点信息失败==>驱动码垛位托盘前进失败!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | wrkMast.setWrkSts(52L); | 
|---|
|  |  |  | wrkMastMapper.updateById(wrkMast); | 
|---|
|  |  |  | Thread.sleep(100); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //任务完成 | 
|---|
|  |  |  | boolean result2 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(4, staProtocol)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | //            e.printStackTrace(); | 
|---|
|  |  |  | //            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | log.error("其他  ===>> 码垛完成驱动托盘进入下一步"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 其他  ===>> 码垛完成驱动托盘进入下一步 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void stackingCompletionDriveTrayOk2() { | 
|---|
|  |  |  | for (DevpSlave devp : slaveProperties.getDevp()) { | 
|---|
|  |  |  | // 遍历拣料入库口 | 
|---|
|  |  |  | for (DevpSlave.Sta pickSta : devp.getPickSta2()) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 获取拣料入库站信息 | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isPakMk()  && staProtocol.getWorkNo()!=0 && staProtocol.isOutEnable()) {// | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (wrkMast == null) { | 
|---|
|  |  |  | log.error("站点号"+staProtocol.getSiteId()+"未查询到工作档案!"); | 
|---|
|  |  |  | // 无拣料数据 | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast.getSheetNo()) || !wrkMast.getSheetNo().equals("2") || wrkMast.getIoType()<100 || wrkMast.getWrkSts()!=14){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (wrkMast.getIoType()==101){ | 
|---|
|  |  |  | //任务完成 | 
|---|
|  |  |  | boolean result1 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(3, staProtocol)); | 
|---|
|  |  |  | wrkMast.setSheetNo("3"); | 
|---|
|  |  |  | wrkMastMapper.updateById(wrkMast); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) | 
|---|
|  |  |  | || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //任务完成 | 
|---|
|  |  |  | boolean result1 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(3, staProtocol)); | 
|---|
|  |  |  | wrkMast.setSheetNo("3"); | 
|---|
|  |  |  | wrkMastMapper.updateById(wrkMast); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | Thread.sleep(100); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | boolean result2 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(4, staProtocol)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 其他  ===>> 贴标完成驱动托盘进入下一步 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void stackingCompletionDriveTray3() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | int[] staNos=new int[]{144};//(1楼1个贴标位,根据现场修改) | 
|---|
|  |  |  | for (int staNo : staNos){ | 
|---|
|  |  |  | BasDevp basDevp = basDevpService.selectById(staNo); | 
|---|
|  |  |  | if ((basDevp.getWrkNo()<9900 || basDevp.getWrkNo()>9999) && basDevp.getWrkNo()!=32222){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne202(staNo); | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast)){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 获取站点信息 | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(staNo); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 入出库模式判断 | 
|---|
|  |  |  | //                if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; } | 
|---|
|  |  |  | //                if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | //                    continue; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!staProtocol.isLoading()){ | 
|---|
|  |  |  | log.info("{}站点无物,异常!",staNo); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!staProtocol.getWorkNo().equals(wrkMast.getWrkNo())){ | 
|---|
|  |  |  | log.info("站点工作号={} 与贴标工作号={} 不一致,异常!",staProtocol.getWorkNo(),wrkMast.getWrkNo().shortValue()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 判断是否满足入库条件 | 
|---|
|  |  |  | if (staProtocol.isAutoing() | 
|---|
|  |  |  | && staProtocol.isLoading() | 
|---|
|  |  |  | ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkMast.getWrkNo()); | 
|---|
|  |  |  | staProtocol.setStaNo(wrkMast.getStaNo()); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | throw new CoolException("更新plc站点信息失败==>驱动码垛位托盘前进失败!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | wrkMast.setWrkSts(55L); | 
|---|
|  |  |  | wrkMastMapper.updateById(wrkMast); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | //            e.printStackTrace(); | 
|---|
|  |  |  | //            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | log.error("其他  ===>> 贴标完成驱动托盘进入下一步"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 其他  ===>> 退货码垛完成托盘继续下一步 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void stackingCompletionDriveTrayOk3() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | int[] staNos=new int[]{118}; | 
|---|
|  |  |  | for (int staNo : staNos){ | 
|---|
|  |  |  | BasDevp basDevp = basDevpService.selectById(staNo); | 
|---|
|  |  |  | if (Cools.isEmpty(basDevp) || basDevp.getWrkNo()!=0 || basDevp.getReportSign()!=3){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne145(145); | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast)){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 获取站点信息 | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(staNo); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | StaProtocol staProtocol147 = devpThread.getStation().get(147); | 
|---|
|  |  |  | if (staProtocol147 == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol147 = staProtocol147.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!staProtocol.isLoading()){ | 
|---|
|  |  |  | log.info("{}站点无物,异常!",staNo); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (staProtocol147.isLoading()){ | 
|---|
|  |  |  | log.info("{}站点有物!",staProtocol147.getSiteId()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 判断是否满足入库条件 | 
|---|
|  |  |  | if (staProtocol.isAutoing() | 
|---|
|  |  |  | && staProtocol.isLoading() | 
|---|
|  |  |  | && !staProtocol.isEmptyMk() | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | boolean result3 = MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol147)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkMast.getWrkNo()); | 
|---|
|  |  |  | staProtocol.setStaNo(wrkMast.getStaNo()); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | throw new CoolException("更新plc站点信息失败==>驱动码垛位托盘前进失败!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wrkMast.setSheetNo("5"); | 
|---|
|  |  |  | wrkMastMapper.updateById(wrkMast); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | boolean result4 = MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol147)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | //            e.printStackTrace(); | 
|---|
|  |  |  | //            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | log.error("其他  ===>> 退货码垛完成托盘继续下一步"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 其他  ===>> 拆垛完成继续下一步  运行途中自动避让空板 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void stackingCompletionDriveTray4() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | int[] staNos=new int[]{134};//(134有任务,135空闲,则避让) | 
|---|
|  |  |  | for (int staNo : staNos){ | 
|---|
|  |  |  | BasDevp basDevp = basDevpService.selectById(staNo); | 
|---|
|  |  |  | BasDevp basDevp135 = basDevpService.selectById(135); | 
|---|
|  |  |  | if (basDevp.getWrkNo()==0 || (basDevp.getWrkNo()<10000 && basDevp.getWrkNo()>9899) ){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (basDevp135.getReportSign()!=0){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | WrkMast wrkMast131 = wrkMastMapper.selectWrkMastUnstackingOne202Two(131); | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast131)){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 获取站点信息 | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
|---|
|  |  |  | StaProtocol staProtocol135 = devpThread.getStation().get(135); | 
|---|
|  |  |  | if (staProtocol135 == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol135 = staProtocol135.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (staProtocol135.getWorkNo()<9900 || staProtocol135.getWorkNo()>9999 || staProtocol135.getWorkNo()==0 | 
|---|
|  |  |  | || !staProtocol135.isLoading() || !staProtocol135.isAutoing()){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(staNo); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!staProtocol.isLoading()){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //                if (!staProtocol.getWorkNo().equals(wrkMast131.getWrkNo())){ | 
|---|
|  |  |  | //                    log.info("站点工作号={} 与贴标工作号={} 不一致,异常!",staProtocol.getWorkNo(),wrkMast131.getWrkNo().shortValue()); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | // 判断是否满足入库条件 | 
|---|
|  |  |  | if (staProtocol.isAutoing() | 
|---|
|  |  |  | && staProtocol.isLoading() | 
|---|
|  |  |  | && basDevp.getReportSign()==0 | 
|---|
|  |  |  | ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) { | 
|---|
|  |  |  | //                    if (true){ | 
|---|
|  |  |  | //                        return; | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //任务完成 | 
|---|
|  |  |  | boolean result1 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(3, staProtocol135)); | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | Thread.sleep(100); | 
|---|
|  |  |  | }catch (Exception e){ } | 
|---|
|  |  |  | basDevp135.setReportSign(2); | 
|---|
|  |  |  | basDevpService.updateById(basDevp135); | 
|---|
|  |  |  | int workNo = commonService.getWorkNo(5); | 
|---|
|  |  |  | staProtocol135.setWorkNo(workNo); | 
|---|
|  |  |  | staProtocol135.setStaNo(144); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol135.getSiteId(), false); | 
|---|
|  |  |  | boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol135)); | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | throw new CoolException("更新plc站点信息失败==>驱动码垛位托盘前进失败!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boolean result2 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(4, staProtocol135)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | //            e.printStackTrace(); | 
|---|
|  |  |  | //            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | log.error("其他  ===>> 贴标完成驱动托盘进入下一步"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | *  完成小车任务 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void rgvCompleteWrkMastSta() { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
|---|
|  |  |  | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
|---|
|  |  |  | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
|---|
|  |  |  | if (rgvProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
|---|
|  |  |  | if (basRgv == null) { | 
|---|
|  |  |  | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 只有当RGV等待WCS确认、自动 | 
|---|
|  |  |  | if (rgvProtocol.getStatusType() == RgvStatusType.WORKING | 
|---|
|  |  |  | && rgvProtocol.getModeType() == RgvModeType.AUTO | 
|---|
|  |  |  | && ((rgvProtocol.getStatusType1()==RgvStatusType.WAITING || rgvProtocol.getStatusType2()==RgvStatusType.WAITING ) || | 
|---|
|  |  |  | (rgvProtocol.getStatusType1()==RgvStatusType.FETCHWAITING || rgvProtocol.getStatusType2()==RgvStatusType.FETCHWAITING )) | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | log.info("{}号小车等待wcs确认,状态{},参数{}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol); | 
|---|
|  |  |  | if (rgvProtocol.getTaskNo1()!=0 && (rgvProtocol.getStatusType1()==RgvStatusType.WAITING || rgvProtocol.getStatusType1()==RgvStatusType.FETCHWAITING)){ | 
|---|
|  |  |  | if (rgvProtocol.getTaskNo1()==(short)32222){ | 
|---|
|  |  |  | boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | if (!rgvComplete){ | 
|---|
|  |  |  | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); | 
|---|
|  |  |  | rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1().longValue()); | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=1 || wrkMastSta.getWrkSts()!=1){ | 
|---|
|  |  |  | log.error("未查到小车执行任务或者执行任务状态不符合!"+wrkMastSta); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); | 
|---|
|  |  |  | if (!Cools.isEmpty(wrkMast) && wrkMastSta.getWrkType()!=5){ | 
|---|
|  |  |  | Thread.sleep(200); | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!staProtocol.isAutoing() || !staProtocol.isLoading()){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 下发站点信息 | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkMast.getWrkNo()); | 
|---|
|  |  |  | staProtocol.setStaNo(wrkMast.getStaNo()); | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | log.error("小车任务完成下发输送线任务:"+staProtocol); | 
|---|
|  |  |  | //                            try{ | 
|---|
|  |  |  | //                                Thread.sleep(1000); | 
|---|
|  |  |  | //                                DevpThread devpThreadEnd = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
|---|
|  |  |  | //                                StaProtocol staProtocolEnd = devpThreadEnd.getStation().get(wrkMastSta.getStaEnd()); | 
|---|
|  |  |  | //                                log.error("小车任务完成读取输送线任务:"+staProtocolEnd); | 
|---|
|  |  |  | //                                if (staProtocolEnd.getWorkNo()==0 ){ //|| !staProtocolEnd.getWorkNo().equals(wrkMast.getWrkNo()) | 
|---|
|  |  |  | //                                    staProtocolEnd.setWorkNo(wrkMast.getWrkNo()); | 
|---|
|  |  |  | //                                    staProtocolEnd.setStaNo(wrkMast.getStaNo()); | 
|---|
|  |  |  | //                                    if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocolEnd))) { | 
|---|
|  |  |  | //                                        continue; | 
|---|
|  |  |  | //                                    } | 
|---|
|  |  |  | //                                    log.error("小车任务完成下发输送线任务第二次:"+staProtocolEnd); | 
|---|
|  |  |  | //                                } | 
|---|
|  |  |  | //                            }catch (Exception e){ | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                            } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | if (!rgvComplete){ | 
|---|
|  |  |  | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | wrkMastSta.setWrkSts(3); | 
|---|
|  |  |  | wrkMastStaMapper.updateById(wrkMastSta); | 
|---|
|  |  |  | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); | 
|---|
|  |  |  | rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); | 
|---|
|  |  |  | }else if (rgvProtocol.getTaskNo2()!=0 && (rgvProtocol.getStatusType2()==RgvStatusType.WAITING || rgvProtocol.getStatusType2()==RgvStatusType.FETCHWAITING)){ | 
|---|
|  |  |  | if (rgvProtocol.getTaskNo2()==(short)32222){ | 
|---|
|  |  |  | boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | if (!rgvComplete){ | 
|---|
|  |  |  | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); | 
|---|
|  |  |  | rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2().longValue()); | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=2){ | 
|---|
|  |  |  | log.error("未查到小车执行任务或者执行任务状态不符合!"+wrkMastSta); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); | 
|---|
|  |  |  | if (!Cools.isEmpty(wrkMast)  && wrkMastSta.getWrkType()!=5){ | 
|---|
|  |  |  | Thread.sleep(200); | 
|---|
|  |  |  | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); | 
|---|
|  |  |  | if (!staProtocol.isAutoing() || !staProtocol.isLoading()){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 下发站点信息 | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkMast.getWrkNo()); | 
|---|
|  |  |  | staProtocol.setStaNo(wrkMast.getStaNo()); | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | log.error("小车任务完成下发输送线任务:"+staProtocol); | 
|---|
|  |  |  | //                            try{ | 
|---|
|  |  |  | //                                Thread.sleep(1000); | 
|---|
|  |  |  | //                                DevpThread devpThreadEnd = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
|---|
|  |  |  | //                                StaProtocol staProtocolEnd = devpThreadEnd.getStation().get(wrkMastSta.getStaEnd()); | 
|---|
|  |  |  | //                                log.error("小车任务完成读取输送线任务:"+staProtocolEnd); | 
|---|
|  |  |  | //                                if (staProtocolEnd.getWorkNo()==0 ){ //|| !staProtocolEnd.getWorkNo().equals(wrkMast.getWrkNo()) | 
|---|
|  |  |  | //                                    staProtocolEnd.setWorkNo(wrkMast.getWrkNo()); | 
|---|
|  |  |  | //                                    staProtocolEnd.setStaNo(wrkMast.getStaNo()); | 
|---|
|  |  |  | //                                    if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocolEnd))) { | 
|---|
|  |  |  | //                                        continue; | 
|---|
|  |  |  | //                                    } | 
|---|
|  |  |  | //                                    log.error("小车任务完成下发输送线任务第二次:"+staProtocolEnd); | 
|---|
|  |  |  | //                                } | 
|---|
|  |  |  | //                            }catch (Exception e){ | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                            } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | if (!rgvComplete){ | 
|---|
|  |  |  | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | wrkMastSta.setWrkSts(3); | 
|---|
|  |  |  | wrkMastStaMapper.updateById(wrkMastSta); | 
|---|
|  |  |  | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); | 
|---|
|  |  |  | rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | log.error("小车复位失败,小车号{},等待wcs确认但是没有工作号!",rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("小车复位线程报错!"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 入出库  ===>>  小车作业下发 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized boolean rgvIoExecute(Integer sign) { | 
|---|
|  |  |  | boolean rgvIoExecuteSign = false; | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
|---|
|  |  |  | // 获取小车信息 | 
|---|
|  |  |  | boolean signWork = false; | 
|---|
|  |  |  | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
|---|
|  |  |  | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
|---|
|  |  |  | if (rgvProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
|---|
|  |  |  | if (basRgv == null) { | 
|---|
|  |  |  | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 只有当RGV空闲、自动,工位一无物//rgv可用 | 
|---|
|  |  |  | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getModeType() == RgvModeType.AUTO | 
|---|
|  |  |  | && rgvProtocol.getLoaded1()==0 | 
|---|
|  |  |  | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | switch (sign){ | 
|---|
|  |  |  | //执行小车货物搬运任务 | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | signWork = rgvRunWrkMastFullSta(rgvSlave); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | //执行小车空板搬运任务 | 
|---|
|  |  |  | case 2://放//拆盘 | 
|---|
|  |  |  | signWork = rgvRunWrkMastEmptyStaPut(rgvSlave); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 3://满放 | 
|---|
|  |  |  | signWork = rgvRunWrkMastEmptyStaPutFull(rgvSlave); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 4://取叠盘 | 
|---|
|  |  |  | signWork = rgvRunWrkMastEmptyStaTake(rgvSlave); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 5:////满取 | 
|---|
|  |  |  | signWork = rgvRunWrkMastEmptyStaTakeFull(rgvSlave); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 6:////提升 | 
|---|
|  |  |  | //                            signWork = qwe(); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 7:////位移 | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for (int signCount = 1;!signWork && signCount<7;signCount++){ | 
|---|
|  |  |  | switch (signCount){ | 
|---|
|  |  |  | case 1://执行小车货物搬运任务 | 
|---|
|  |  |  | signWork = rgvRunWrkMastFullSta(rgvSlave); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 2://放//拆盘 | 
|---|
|  |  |  | signWork = rgvRunWrkMastEmptyStaPut(rgvSlave); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 3://满放 | 
|---|
|  |  |  | signWork = rgvRunWrkMastEmptyStaPutFull(rgvSlave); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 4://取叠盘 | 
|---|
|  |  |  | signWork = rgvRunWrkMastEmptyStaTake(rgvSlave); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 5:////满取 | 
|---|
|  |  |  | signWork = rgvRunWrkMastEmptyStaTakeFull(rgvSlave); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 6:////提升 | 
|---|
|  |  |  | //                            signWork = rgvRunWrkMastEmptyStaPut(); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 7:////位移 | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!rgvIoExecuteSign){ | 
|---|
|  |  |  | rgvIoExecuteSign = signWork; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //            if (!rgvIoExecuteSign){ | 
|---|
|  |  |  | //                if (sign>6){ | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("RGV小车任务下发报错"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return rgvIoExecuteSign; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 执行小车搬运任务 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized boolean rgvRunWrkMastFullSta(RgvSlave rgvSlave) { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | //            for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
|---|
|  |  |  | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
|---|
|  |  |  | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
|---|
|  |  |  | if (rgvProtocol == null) { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
|---|
|  |  |  | if (basRgv == null) { | 
|---|
|  |  |  | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 只有当RGV空闲、自动,工位一无物//rgv可用 | 
|---|
|  |  |  | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getModeType() == RgvModeType.AUTO | 
|---|
|  |  |  | && rgvProtocol.getLoaded1()==0 | 
|---|
|  |  |  | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | BasRgvMap basRgvMap = basRgvMapMapper.selectById(basRgv.getRgvNo()); | 
|---|
|  |  |  | if (basRgvMap == null) { | 
|---|
|  |  |  | log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); | 
|---|
|  |  |  | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 | 
|---|
|  |  |  | List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); | 
|---|
|  |  |  | for (WrkMastSta wrkMastSta : wrkMastStaList){ | 
|---|
|  |  |  | if (wrkMastSta.getType()!=1 || wrkMastSta.getWrkType()!=3){//1:满版   3:取放 | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd()); | 
|---|
|  |  |  | if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y")){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); | 
|---|
|  |  |  | if (sign){ | 
|---|
|  |  |  | boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd()); | 
|---|
|  |  |  | if (signMap){ | 
|---|
|  |  |  | wrkMastSta.setWrkSts(1); | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | wrkMastStaMapper.updateById(wrkMastSta); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("更新小车任务失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | log.error("3864行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("3875行执行小车搬运任务下发失败"); | 
|---|
|  |  |  | log.error("3875行"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 执行小车搬运任务//拆盘 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized boolean rgvRunWrkMastEmptyStaPut(RgvSlave rgvSlave) {//拆盘 | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | //            for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
|---|
|  |  |  | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
|---|
|  |  |  | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
|---|
|  |  |  | if (rgvProtocol == null) { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
|---|
|  |  |  | if (basRgv == null) { | 
|---|
|  |  |  | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 只有当RGV空闲、自动,工位二有物//rgv可用//拆盘 | 
|---|
|  |  |  | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getModeType() == RgvModeType.AUTO | 
|---|
|  |  |  | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 | 
|---|
|  |  |  | && (rgvProtocol.getLoaded2()==3  || rgvProtocol.getLoaded2()==1 || rgvProtocol.getLoaded2()==4)////0 无物;1 一层无物二层有物 (只能拆叠) ;2一层有物二层无物() ;3  1、2层都有物  4:()只允许拆盘 | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | if (basRgvMap == null) { | 
|---|
|  |  |  | log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 | 
|---|
|  |  |  | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//获取活动范围 | 
|---|
|  |  |  | List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);//查询可执行任务 | 
|---|
|  |  |  | for (WrkMastSta wrkMastSta : wrkMastStaList){ | 
|---|
|  |  |  | if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=2){// 2:空板  || 工作类型  1:取(叠盘)  2:拆盘  5:满取  6:满放 | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boolean sign = false; | 
|---|
|  |  |  | if ( wrkMastSta.getStaEnd()!=0){//放 | 
|---|
|  |  |  | BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd()); | 
|---|
|  |  |  | if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y")){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | sign = rgvPutEmpty(rgvProtocol.getRgvNo(),wrkMastSta);//拆盘 | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (sign){ | 
|---|
|  |  |  | boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd()); | 
|---|
|  |  |  | if (signMap){ | 
|---|
|  |  |  | wrkMastSta.setWrkSts(2); | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | wrkMastStaMapper.updateById(wrkMastSta); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("更新小车任务失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | log.error("3857行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("3933行执行小车放空板任务下发失败"); | 
|---|
|  |  |  | log.error("3933行"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 执行小车搬运任务 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized boolean rgvRunWrkMastEmptyStaPutFull(RgvSlave rgvSlave) {//满放 | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | //            for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
|---|
|  |  |  | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
|---|
|  |  |  | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
|---|
|  |  |  | if (rgvProtocol == null) { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
|---|
|  |  |  | if (basRgv == null) { | 
|---|
|  |  |  | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 只有当RGV空闲、自动,工位二有物//rgv可用 | 
|---|
|  |  |  | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getModeType() == RgvModeType.AUTO | 
|---|
|  |  |  | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 | 
|---|
|  |  |  | &&  (rgvProtocol.getLoaded2()==2  || rgvProtocol.getLoaded2()==3 ) ////0 无物;1 一层无物二层有物  ;2一层有物二层无物 (只能满放);3  1、2层都有物  4:()只允许拆盘 | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | if (basRgvMap == null) { | 
|---|
|  |  |  | log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 | 
|---|
|  |  |  | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//获取活动范围 | 
|---|
|  |  |  | List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);//查询可执行任务 | 
|---|
|  |  |  | for (WrkMastSta wrkMastSta : wrkMastStaList){ | 
|---|
|  |  |  | if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=6){// 2:空板  || 工作类型  1:取(叠盘)  2:拆盘  5:满取  6:满放  7:提升 | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boolean sign = false; | 
|---|
|  |  |  | if ( wrkMastSta.getStaEnd()!=0){//满放 | 
|---|
|  |  |  | BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd()); | 
|---|
|  |  |  | if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y")){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | sign = rgvPutEmptyFull(rgvProtocol.getRgvNo(),wrkMastSta); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (sign){ | 
|---|
|  |  |  | boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd()); | 
|---|
|  |  |  | if (signMap){ | 
|---|
|  |  |  | wrkMastSta.setWrkSts(2); | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | wrkMastStaMapper.updateById(wrkMastSta); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("更新小车任务失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | log.error("3857行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("3933行执行小车放空板任务下发失败"); | 
|---|
|  |  |  | log.error("3933行"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public synchronized boolean rgvRunWrkMastEmptyStaTake(RgvSlave rgvSlave) {//叠盘 | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | //            for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
|---|
|  |  |  | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
|---|
|  |  |  | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
|---|
|  |  |  | if (rgvProtocol == null) { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
|---|
|  |  |  | if (basRgv == null) { | 
|---|
|  |  |  | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 只有当RGV空闲、自动,工位二无物//rgv可用 | 
|---|
|  |  |  | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getModeType() == RgvModeType.AUTO | 
|---|
|  |  |  | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 | 
|---|
|  |  |  | &&  (rgvProtocol.getLoaded2()==0  || rgvProtocol.getLoaded2()==1 ) //现场修改:叠盘机,////0 无物;1 一层无物二层有物(只能拆叠)   ;2一层有物二层无物 (只能满放);3  1、2层都有物  4:()只允许拆盘 | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | if (basRgvMap == null) { | 
|---|
|  |  |  | log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); | 
|---|
|  |  |  | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 | 
|---|
|  |  |  | List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); | 
|---|
|  |  |  | for (WrkMastSta wrkMastSta : wrkMastStaList){ | 
|---|
|  |  |  | if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=1){// 2:空板  || 工作类型  1:取(叠盘)  2:拆盘  5:满取  6:满放 | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boolean sign = false; | 
|---|
|  |  |  | if ( wrkMastSta.getStaStart()!=0){//取 | 
|---|
|  |  |  | BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaStart()); | 
|---|
|  |  |  | if (!basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("Y")){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | sign = rgvTakeEmpty(rgvProtocol.getRgvNo(),wrkMastSta);//叠盘 | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (sign){ | 
|---|
|  |  |  | boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute()); | 
|---|
|  |  |  | if (signMap){ | 
|---|
|  |  |  | wrkMastSta.setWrkSts(1); | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | wrkMastStaMapper.updateById(wrkMastSta); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("更新小车任务失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | log.error("3879行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("3989行执行小车取空板任务下发失败"); | 
|---|
|  |  |  | log.error("3989行"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public synchronized boolean rgvRunWrkMastEmptyStaTakeFull(RgvSlave rgvSlave) {//满取 | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | //            for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
|---|
|  |  |  | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
|---|
|  |  |  | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
|---|
|  |  |  | if (rgvProtocol == null) { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
|---|
|  |  |  | if (basRgv == null) { | 
|---|
|  |  |  | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 只有当RGV空闲、自动,工位二无物//rgv可用 | 
|---|
|  |  |  | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getModeType() == RgvModeType.AUTO | 
|---|
|  |  |  | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 | 
|---|
|  |  |  | &&  rgvProtocol.getLoaded2()==0  //现场修改:叠盘机,////0 无物;1 一层无物二层有物(只能拆叠)   ;2一层有物二层无物 (只能满放);3  1、2层都有物  4:()只允许拆盘 | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | if (basRgvMap == null) { | 
|---|
|  |  |  | log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); | 
|---|
|  |  |  | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 | 
|---|
|  |  |  | List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); | 
|---|
|  |  |  | for (WrkMastSta wrkMastSta : wrkMastStaList){ | 
|---|
|  |  |  | if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=5){// 2:空板  || 工作类型  1:取(叠盘)  2:拆盘  5:满取  6:满放 | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boolean sign = false; | 
|---|
|  |  |  | if (wrkMastSta.getStaStart()!=0){//满取 | 
|---|
|  |  |  | BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaStart()); | 
|---|
|  |  |  | if (!basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("Y")){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | sign = rgvTakeEmptyFull(rgvProtocol.getRgvNo(),wrkMastSta); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (sign){ | 
|---|
|  |  |  | boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute()); | 
|---|
|  |  |  | if (signMap){ | 
|---|
|  |  |  | wrkMastSta.setWrkSts(1); | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | wrkMastStaMapper.updateById(wrkMastSta); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("更新小车任务失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | log.error("3879行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("3989行执行小车取空板任务下发失败"); | 
|---|
|  |  |  | log.error("3989行"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 有任务但未执行  此时需要调整小车位置 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized void rgvRunWrkMastEmptyStaAvoidance() { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | Integer integer = wrkMastStaMapper.selectAllWrkStsCount(null,0);//查询状态为0的任务 | 
|---|
|  |  |  | if (integer==0){ | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
|---|
|  |  |  | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
|---|
|  |  |  | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
|---|
|  |  |  | if (rgvProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
|---|
|  |  |  | if (basRgv == null) { | 
|---|
|  |  |  | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 只有当RGV空闲、自动,工位一无物//rgv可用 | 
|---|
|  |  |  | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getModeType() == RgvModeType.AUTO | 
|---|
|  |  |  | && rgvProtocol.getLoaded1()==0  //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 | 
|---|
|  |  |  | && rgvProtocol.getTaskNo1()==0 | 
|---|
|  |  |  | && rgvProtocol.getTaskNo2()==0 | 
|---|
|  |  |  | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | if (rgvProtocol.getRgvPosI().equals(basRgvMap.getStartRoute())){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (rgvProtocol.getRgvNo()==1 && (rgvProtocol.getRgvPosI().equals(101) || rgvProtocol.getRgvPosI().equals(102) )){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else if (rgvProtocol.getRgvNo()==2 && (rgvProtocol.getRgvPosI().equals(116) || rgvProtocol.getRgvPosI().equals(117) ) ){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | rgvAvoidanceXY(rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("4109行执行小车初始化任务下发失败"); | 
|---|
|  |  |  | log.error("4109行"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 刷新地图数据 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized void refreshRgvMap() { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
|---|
|  |  |  | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
|---|
|  |  |  | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
|---|
|  |  |  | if (rgvProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
|---|
|  |  |  | if (basRgv == null) { | 
|---|
|  |  |  | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 只有当RGV空闲、自动,工位一无物//rgv可用 | 
|---|
|  |  |  | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
|---|
|  |  |  | && rgvProtocol.getModeType() == RgvModeType.AUTO | 
|---|
|  |  |  | && rgvProtocol.getLoaded1()==0  //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 | 
|---|
|  |  |  | && rgvProtocol.getTaskNo1()==0 | 
|---|
|  |  |  | && rgvProtocol.getTaskNo2()==0 | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvSlave.getId()); | 
|---|
|  |  |  | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); | 
|---|
|  |  |  | rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("4109行执行小车初始化任务下发失败"); | 
|---|
|  |  |  | log.error("4109行"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 小车XY移动  避让 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean rgvAvoidanceXY(Integer rgvId){ | 
|---|
|  |  |  | if (rgvId==1){ | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId); | 
|---|
|  |  |  | //  命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | RgvCommand rgvCommand = new RgvCommand(); | 
|---|
|  |  |  | rgvCommand.setRgvNo(rgvId); // RGV编号 | 
|---|
|  |  |  | rgvCommand.setAckFinish1((short) 0);  // 工位1任务完成确认位 | 
|---|
|  |  |  | rgvCommand.setTaskNo1((short)32222); // 工位1工作号 | 
|---|
|  |  |  | rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 工位1任务模式:  回原点 | 
|---|
|  |  |  | //basRgvMap.getLockStartRoute().shortValue() | 
|---|
|  |  |  | rgvCommand.setSourceStaNo1( (short)101); | 
|---|
|  |  |  | rgvCommand.setCommand((short) 1);   //工位1任务确认 | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { | 
|---|
|  |  |  | //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务   step=9,回原点 9999任务号 | 
|---|
|  |  |  | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId); | 
|---|
|  |  |  | //  命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | RgvCommand rgvCommand = new RgvCommand(); | 
|---|
|  |  |  | rgvCommand.setRgvNo(rgvId); // RGV编号 | 
|---|
|  |  |  | rgvCommand.setAckFinish2((short) 0);  // 工位2任务完成确认位 | 
|---|
|  |  |  | rgvCommand.setTaskNo2((short)32222); // 工位2工作号 | 
|---|
|  |  |  | rgvCommand.setTaskMode2(RgvTaskModeType.X_MOVE); // 工位2任务模式:  回原点 | 
|---|
|  |  |  | rgvCommand.setSourceStaNo2((short)117); | 
|---|
|  |  |  | rgvCommand.setCommand((short) 2);   //工位2任务确认 | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { | 
|---|
|  |  |  | //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务   step=9,回原点 9999任务号 | 
|---|
|  |  |  | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 小车取货至工位任务 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean rgvTakeFullAll(Integer rgvId,WrkMastSta wrkMastSta){ | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | //  命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | RgvCommand rgvCommand = new RgvCommand(); | 
|---|
|  |  |  | rgvCommand.setRgvNo(rgvId); // RGV编号 | 
|---|
|  |  |  | rgvCommand.setAckFinish1((short) 0);  // 工位1任务完成确认位 | 
|---|
|  |  |  | rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 工位1工作号 | 
|---|
|  |  |  | rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 工位1任务模式:  取放货 | 
|---|
|  |  |  | rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue());   //工位1起点 | 
|---|
|  |  |  | rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue());   //工位1目标站点 | 
|---|
|  |  |  | rgvCommand.setCommand((short) 1);   //工位1任务确认 | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { | 
|---|
|  |  |  | //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务 | 
|---|
|  |  |  | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 小车取货至工位任务 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean rgvTakeFull(Integer rgvId,WrkMastSta wrkMastSta){ | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | //  命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | RgvCommand rgvCommand = new RgvCommand(); | 
|---|
|  |  |  | rgvCommand.setRgvNo(rgvId); // RGV编号 | 
|---|
|  |  |  | rgvCommand.setAckFinish1((short) 0);  // 工位1任务完成确认位 | 
|---|
|  |  |  | rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 工位1工作号 | 
|---|
|  |  |  | rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 工位1任务模式:  取货 | 
|---|
|  |  |  | rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue());   //工位1起点 | 
|---|
|  |  |  | rgvCommand.setCommand((short) 1);   //工位1任务确认 | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { | 
|---|
|  |  |  | //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务 | 
|---|
|  |  |  | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 小车放货至输送线任务 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean rgvPutFull(Integer rgvId,WrkMastSta wrkMastSta){ | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | //  命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | RgvCommand rgvCommand = new RgvCommand(); | 
|---|
|  |  |  | rgvCommand.setRgvNo(rgvId); // RGV编号 | 
|---|
|  |  |  | rgvCommand.setAckFinish1((short) 0);  // 工位1任务完成确认位 | 
|---|
|  |  |  | rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 工位1工作号 | 
|---|
|  |  |  | rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 工位1任务模式:  放货 | 
|---|
|  |  |  | rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue());   //工位1目标站点 | 
|---|
|  |  |  | rgvCommand.setCommand((short) 1);   //工位1任务确认 | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { | 
|---|
|  |  |  | //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务 | 
|---|
|  |  |  | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 小车取空板至工位任务  叠盘 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean rgvTakeEmpty(Integer rgvId,WrkMastSta wrkMastSta){ | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | //  命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | RgvCommand rgvCommand = new RgvCommand(); | 
|---|
|  |  |  | rgvCommand.setRgvNo(rgvId); // RGV编号 | 
|---|
|  |  |  | rgvCommand.setAckFinish2((short) 0);  // 工位2任务完成确认位 | 
|---|
|  |  |  | rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 工位2工作号 | 
|---|
|  |  |  | rgvCommand.setTaskMode2(RgvTaskModeType.FETCH); // 工位2任务模式:  取货 | 
|---|
|  |  |  | rgvCommand.setSourceStaNo2(wrkMastSta.getStaStart().shortValue());   //工位2起点 | 
|---|
|  |  |  | rgvCommand.setCommand((short) 2);   //工位2任务确认 | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { | 
|---|
|  |  |  | //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务 | 
|---|
|  |  |  | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 小车放空板至输送线任务   //拆盘 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean rgvPutEmpty(Integer rgvId,WrkMastSta wrkMastSta){ | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | //  命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | RgvCommand rgvCommand = new RgvCommand(); | 
|---|
|  |  |  | rgvCommand.setRgvNo(rgvId); // RGV编号 | 
|---|
|  |  |  | rgvCommand.setAckFinish2((short) 0);  // 工位2任务完成确认位 | 
|---|
|  |  |  | rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 工位2工作号 | 
|---|
|  |  |  | rgvCommand.setTaskMode2(RgvTaskModeType.PUT); // 工位2任务模式:  放货 | 
|---|
|  |  |  | rgvCommand.setDestinationStaNo2(wrkMastSta.getStaEnd().shortValue());   //工位2目标站点 | 
|---|
|  |  |  | rgvCommand.setCommand((short) 2);   //工位2任务确认 | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { | 
|---|
|  |  |  | //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务 | 
|---|
|  |  |  | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 小车取空板至工位任务  满取 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean rgvTakeEmptyFull(Integer rgvId,WrkMastSta wrkMastSta){ | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | //  命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | RgvCommand rgvCommand = new RgvCommand(); | 
|---|
|  |  |  | rgvCommand.setRgvNo(rgvId); // RGV编号 | 
|---|
|  |  |  | rgvCommand.setAckFinish2((short) 0);  // 工位2任务完成确认位 | 
|---|
|  |  |  | rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 工位2工作号 | 
|---|
|  |  |  | rgvCommand.setTaskMode2(RgvTaskModeType.FETCH_5); // 工位2任务模式:  满取 | 
|---|
|  |  |  | rgvCommand.setSourceStaNo2(wrkMastSta.getStaStart().shortValue());   //工位2起点 | 
|---|
|  |  |  | rgvCommand.setCommand((short) 2);   //工位2任务确认 | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { | 
|---|
|  |  |  | //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务 | 
|---|
|  |  |  | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 小车放空板至输送线任务   //满放 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean rgvPutEmptyFull(Integer rgvId,WrkMastSta wrkMastSta){ | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | //  命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | RgvCommand rgvCommand = new RgvCommand(); | 
|---|
|  |  |  | rgvCommand.setRgvNo(rgvId); // RGV编号 | 
|---|
|  |  |  | rgvCommand.setAckFinish2((short) 0);  // 工位2任务完成确认位 | 
|---|
|  |  |  | rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 工位2工作号 | 
|---|
|  |  |  | rgvCommand.setTaskMode2(RgvTaskModeType.PUT_6); // 工位2任务模式:  满放 | 
|---|
|  |  |  | rgvCommand.setDestinationStaNo2(wrkMastSta.getStaEnd().shortValue());   //工位2目标站点 | 
|---|
|  |  |  | rgvCommand.setCommand((short) 2);   //工位2任务确认 | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { | 
|---|
|  |  |  | //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务 | 
|---|
|  |  |  | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 小车复位 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean rgvComplete(Integer rgvId){ | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | //  命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(3, new RgvCommand()))) { | 
|---|
|  |  |  | //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务 | 
|---|
|  |  |  | log.error("RGV命令下发失败,RGV号={}",rgvId); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | log.info("RGV命令下发成功,RGV号={}",rgvId); | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("RGV命令下发失败,RGV号={}。异常:"+e,rgvId); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 小车地图更新  更新锁 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean rgvMapUpdate(BasRgvMap basRgvMapCurrent,Integer staStart,Integer staEnd){ | 
|---|
|  |  |  | if (true){ | 
|---|
|  |  |  | basRgvMapMapper.updateById(basRgvMapCurrent); | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        List<Integer> integers = RouteUtils.RouteMapCurrentFar(basRgvMapCurrent.getNowRoute(),staStart,staEnd, basRgvMapCurrent.getLockStartRoute()); | 
|---|
|  |  |  | //更新当前小车锁 | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | Integer farCurrentStaNo = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getNowRoute(), staStart, staEnd, basRgvMapCurrent.getLockStartRoute());//获取最远站点 | 
|---|
|  |  |  | Integer fallMerge = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getRgvNo(), farCurrentStaNo); //获取合并干涉项 | 
|---|
|  |  |  | basRgvMapCurrent.setLockEndRoute(fallMerge); | 
|---|
|  |  |  | basRgvMapMapper.updateById(basRgvMapCurrent); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //更新另一台小车地图 | 
|---|
|  |  |  | Integer rgvNoOther = basRgvMapCurrent.getRgvNoOther(); | 
|---|
|  |  |  | BasRgvMap basRgvMapOther = basRgvMapMapper.selectById(rgvNoOther); | 
|---|
|  |  |  | List<Integer> integers = RouteUtils.RouteMapCurrentFar(fallMerge, basRgvMapCurrent.getLockStartRoute()); | 
|---|
|  |  |  | Integer lockEndRoute = RouteUtils.RouteMapOtherFarStnNo(integers, basRgvMapCurrent.getLockStartRoute());//另一台小车可活动最远位置 | 
|---|
|  |  |  | basRgvMapOther.setEndRoute(lockEndRoute); | 
|---|
|  |  |  | basRgvMapMapper.updateById(basRgvMapOther); | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("小车地图更新出错!"); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | *  Jar任务创建 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void jarGenerateWrkMastSta() { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("小车复位线程报错!"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | *  Jar任务执行 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void jarExecuteWrkMastSta() { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("小车复位线程报错!"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | *  Jar完成 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void jarCompleteWrkMastSta() { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("小车复位线程报错!"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 小车取空板至工位任务  满取 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean jarRgvTake1(Integer rgvId,WrkMastSta wrkMastSta){ | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | //  命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | RgvCommand rgvCommand = new RgvCommand(); | 
|---|
|  |  |  | rgvCommand.setRgvNo(rgvId); // RGV编号 | 
|---|
|  |  |  | rgvCommand.setAckFinish2((short) 0);  // 工位2任务完成确认位 | 
|---|
|  |  |  | rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 工位2工作号 | 
|---|
|  |  |  | rgvCommand.setTaskMode2(RgvTaskModeType.FETCH_5); // 工位2任务模式:  满取 | 
|---|
|  |  |  | rgvCommand.setSourceStaNo2(wrkMastSta.getStaStart().shortValue());   //工位2起点 | 
|---|
|  |  |  | rgvCommand.setCommand((short) 2);   //工位2任务确认 | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { | 
|---|
|  |  |  | //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务 | 
|---|
|  |  |  | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * Rgv  移动 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean jarRgvTake2(Integer rgvId,BasJarMast basJarMast){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 小车取空板至工位任务  满取 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean jarRgvTake3(Integer rgvId,BasJarMast basJarMast){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 小车取空板至工位任务  满取 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean jarRgvTake4(Integer rgvId,BasJarMast basJarMast){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 小车取空板至工位任务  满取 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean jarRgvTake5(Integer rgvId,BasJarMast basJarMast){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 小车取空板至工位任务  满取 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean jarRgvTake6(Integer rgvId,BasJarMast basJarMast){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 小车取空板至工位任务  满取 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean jarRgvTake7(Integer rgvId,BasJarMast basJarMast){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 小车取空板至工位任务  满取 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean jarRgvTake8(Integer rgvId,BasJarMast basJarMast){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|