| | |
| | | //mark - 3 - .... |
| | | this.locToLoc(crn, crnProtocol,mark); |
| | | //预调度 |
| | | this.crnRebackHp(crnProtocol, crnThread); |
| | | this.crnRebackHp(crn, crnProtocol, crnThread); |
| | | |
| | | } |
| | | // News.infoNoLog(""+mark+" - 0"+" - 堆垛机入出库作业下发执行完成"); |
| | |
| | | /** |
| | | * 回原点,堆垛机没有执行中任务,设备存在入库任务时叫回原点 |
| | | */ |
| | | public synchronized void crnRebackHp(CrnProtocol crnProtocol, CrnThread crnThread) { |
| | | public synchronized void crnRebackHp(CrnSlave slave, CrnProtocol crnProtocol, CrnThread crnThread) { |
| | | if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { |
| | | if (crnProtocol.getBay() == 52) { |
| | | return; |
| | |
| | | BasCrnp basCrnp = basCrnpService.selectOne( |
| | | new EntityWrapper<BasCrnp>().eq("crn_no", crnProtocol.getCrnNo()) |
| | | ); |
| | | |
| | | Date modiTime = basCrnp.getModiTime(); |
| | | Date now = new Date(); |
| | | // 当前时间 - 修改时间 > 1分钟(60000毫秒) |
| | | if (now.getTime() - modiTime.getTime() < 60 * 1000) { |
| | | return; |
| | | } |
| | | boolean result = true; |
| | | if(crnProtocol.getCrnNo() != 5){ |
| | | return; |
| | | } |
| | | for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) { |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo2()); |
| | | if (staProtocol == null) { |
| | | News.infoNoLog(" - 堆垛机入库站信息(staProtocol!=null继续执行):staProtocol="+staProtocol); |
| | | return; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if(staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 ){ |
| | | result =false; |
| | | } |
| | | } |
| | | int x=1; |
| | | switch (crnProtocol.getCrnNo()){ |
| | |
| | | case 4: x =14; break; |
| | | case 5: x =18; break; |
| | | } |
| | | |
| | | Date modiTime = basCrnp.getModiTime(); |
| | | Date now = new Date(); |
| | | // 当前时间 - 修改时间 > 1分钟(60000毫秒) |
| | | if(result){ |
| | | if (now.getTime() - modiTime.getTime() < 60 * 1000) { |
| | | return; |
| | | } |
| | | } |
| | | if(crnProtocol.getCrnNo() != 5){ |
| | | return; |
| | | } |
| | | |
| | | // 已经存在吊车执行任务时,则过滤3,12 |
| | | if (wrkMastMapper.selectWorking(crnProtocol.getCrnNo()) != null) { |
| | | return; |
| | |
| | | && rgvThread.isPaking() && basRgv.getPakAll().equals("1")){ |
| | | if(basRgv.getPakOut().equals("1") && basRgv.getPakIn().equals("1")){ |
| | | rgvPreSchedulingIn(rgv, rgvProtocol);//若暂无下发任务预调度提前到取货点 |
| | | |
| | | if (rgvProtocol.getLastIo().equals("I")) { |
| | | if (basRgv.getInEnable().equals("1") && basRgv.getPakIn().equals("1")) { |
| | | //mark - 1 - .... |
| | | if (rgvProtocol.getTaskNo1()==0){ |
| | | rgvPreSchedulingIn(rgv, rgvProtocol);//若暂无下发任务预调度提前到取货点 |
| | | } |
| | | rgvProtocol.setLastIo("O"); |
| | | } else if (basRgv.getOutEnable().equals("1") && basRgv.getPakOut().equals("1")) { |
| | | //mark - 2 - .... |
| | | if (rgvProtocol.getTaskNo2()==0){ |
| | | this.rgvPreSchedulingOut(rgv, rgvProtocol); // 出库 |
| | | } |
| | | rgvProtocol.setLastIo("I"); |
| | | } |
| | | } |
| | | // 如果最近一次是出库模式 |
| | | else if (rgvProtocol.getLastIo().equals("O")) { |
| | | if (basRgv.getOutEnable().equals("1") && basRgv.getPakOut().equals("1")) { |
| | | if (rgvProtocol.getTaskNo2()==0){ |
| | | this.rgvPreSchedulingOut(rgv, rgvProtocol); // 出库 |
| | | } |
| | | rgvProtocol.setLastIo("I"); |
| | | } else if (basRgv.getInEnable().equals("1") && basRgv.getPakIn().equals("1")) { |
| | | if (rgvProtocol.getTaskNo1()==0){ |
| | | rgvPreSchedulingIn(rgv, rgvProtocol);//若暂无下发任务预调度提前到取货点 |
| | | } |
| | | rgvProtocol.setLastIo("O"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | /** |
| | |
| | | basRgv.setPakIn("0"); |
| | | basRgvService.updateById(basRgv); |
| | | |
| | | rgvThread.setPaking(false); |
| | | try{ |
| | | wrkMastSta.setWrkSts(1); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功{}",wrkMastSta); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | } else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | /** |
| | | * 小车出库任务取货下发 |
| | | */ |
| | | public synchronized void rgvPreSchedulingOut(RgvSlave slave, RgvProtocol rgvProtocol){ |
| | | for (RgvSlave.RgvStn rgvStn : slave.getRgvOutTStn()) {//rgv出库取货站点 |
| | | boolean flag = false; |
| | | //遍历rgv入库取货站点 |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(rgvStn.getStaNo2()); |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, (int) rgvProtocol.getRgvNo()); |
| | | BasRgv basRgv = basRgvService.selectById(slave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!4", slave.getId()); |
| | | continue; |
| | | } |
| | | if(staProtocol.getWorkNo() == 0){ |
| | | continue; |
| | | } |
| | | StaProtocol staProtocol2 = null; |
| | | WrkMastSta wrkMastSta3 = null; |
| | | |
| | | // if(rgvStn.getStaNo2()!= null ){ |
| | | // staProtocol2 = devpThread.getStation().get(rgvStn.getStaNo2()); |
| | | // if (staProtocol2 == null) { |
| | | // News.infoNoLog(" - Rgv出库站信息(staProtocol!=null继续执行):staProtocol=" + staProtocol); |
| | | // continue; |
| | | // } else { |
| | | // staProtocol2 = staProtocol2.clone(); |
| | | // } |
| | | // BasDevp staDetl2 = basDevpService.selectById(rgvStn.getStaNo2()); |
| | | // if (staDetl2 == null) { |
| | | // News.error( " - 出库 ===>>Rgv站点在数据库不存在, 站点编号={}", rgvStn.getStaNo()); |
| | | // continue; |
| | | // } |
| | | // wrkMastSta3 = wrkMastStaMapper.selectByWrkNo(staProtocol2.getWorkNo()); |
| | | // |
| | | // } |
| | | if (staProtocol == null) { |
| | | News.infoNoLog(" - Rgv出库站信息(staProtocol!=null继续执行):staProtocol=" + staProtocol); |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | // 查询站点详细信息 |
| | | BasDevp staDetl = basDevpService.selectById(rgvStn.getStaNo()); |
| | | if (staDetl == null) { |
| | | News.error(" - 出库 ===>>Rgv站点在数据库不存在, 站点编号={}", rgvStn.getStaNo()); |
| | | continue; |
| | | } |
| | | |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 |
| | | && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) { |
| | | flag = true; |
| | | } |
| | | if (!flag) { |
| | | News.errorNoLog(" - Rgv出库取货站信息(以下需要全true):" |
| | | + "自动信号" + staProtocol.isAutoing() + "有物信号" + staProtocol.isLoading() |
| | | + "工作号>0" + staProtocol.getWorkNo() + "可入信号" + staProtocol.isOutEnable() |
| | | + "能入信号(wms设置).equals(\"Y\")" + staDetl.getCanouting()); |
| | | continue; |
| | | } |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | List<Integer> route = new ArrayList<>(); |
| | | switch (rgvProtocol.getRgvNo()){ |
| | | case 1: route = RouteUtils.getRouteOne();break; |
| | | case 2: route = RouteUtils.getRouteTwo();break; |
| | | } |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号 |
| | | basRgvMapService.updateById(basRgvMap); |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol.getWorkNo()));//根据站点工作号和小车工作范围检索任务档 |
| | | WrkMastSta wrkMastSta1 = wrkMastStaMapper.selectByWrkNo( rgvProtocol.getTaskNo1()); |
| | | if(basRgv.getPakToCrn().equals("0")){ |
| | | wrkMastSta = wrkMastStaMapper.selectNoInterfereCrn(route, route, Long.valueOf(staProtocol2.getWorkNo()));//处理接驳任务时,连续只取接驳任务 |
| | | } |
| | | if( null == wrkMastSta ) { |
| | | News.infoNoLog(" - 查询无待出库数据--wrk_sts0, 工作号={}", staProtocol2.getWorkNo()); |
| | | continue; |
| | | } |
| | | boolean result = false; |
| | | if( LEFT_POSITION.contains(wrkMastSta.getStaEnd())){ |
| | | StaProtocol staProtocolSta = devpThread.getStation().get(wrkMastSta.getStaEnd()); |
| | | if (staProtocolSta == null) { |
| | | News.infoNoLog(" - Rgv出库站信息(staProtocol!=null继续执行):staProtocol=" + staProtocol); |
| | | continue; |
| | | } else { |
| | | staProtocolSta = staProtocolSta.clone(); |
| | | } |
| | | if(staProtocolSta.isLoading()){ |
| | | continue; |
| | | } |
| | | } |
| | | wrkMastSta.setWorkSta(1);//若1号工位有任务给2号工位 |
| | | wrkMastSta.setRgvNo((int) rgvProtocol.getRgvNo()); |
| | | boolean sign = false; |
| | | |
| | | sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //命令下发 |
| | | if (sign){ |
| | | if(wrkMastSta.getMk() == 1){//若已执行 |
| | | basRgv.setPakAll("1"); |
| | | basRgvService.updateById(basRgv); |
| | | } |
| | | if(LEFT_POSITION.contains(wrkMastSta.getStaEnd())){ |
| | | basRgv.setPakToCrn("0"); |
| | | basRgvService.updateById(basRgv); |
| | | if(wrkMastSta3 != null){ |
| | | if(!LEFT_POSITION.contains(wrkMastSta3.getStaEnd())){ |
| | | wrkMastSta3 = null;//若接驳第二位不接驳时取消连续取货 |
| | | } |
| | | } |
| | | } |
| | | if(wrkMastSta3 != null ){ |
| | | List<WrkMastSta> wrkMastStaPaking = wrkMastStaService.selectPakingWrk(wrkMastSta3.getStaStart()); |
| | | if(wrkMastStaPaking.size() < 1){ |
| | | wrkMastSta3.setMk(1); |
| | | basRgv.setPakAll("0"); |
| | | basRgvService.updateById(basRgv); |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta3); |
| | | log.error("锁定相隔站点任务"); |
| | | }catch (Exception e){ |
| | | log.error("锁定相隔站点任务失败"); |
| | | } |
| | | } |
| | | } |
| | | basRgv.setPakIn("0"); |
| | | basRgvService.updateById(basRgv); |
| | | rgvThread.setPaking(false); |
| | | try{ |
| | | wrkMastSta.setWrkSts(1); |
| | |
| | | continue; |
| | | } |
| | | if (staProtocol.isAutoing() ) { |
| | | //staProtocol.getWorkNo()>10000 |
| | | if(staProtocol.getWorkNo()>10000){ |
| | | BasAgvMast basAgvMast = new BasAgvMast(); |
| | | List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("task_no", staProtocol.getWorkNo())); |
| | |
| | | agvBindCtnrAndBinParam.setCtnrCode(basAgvMast.getBarcode()); |
| | | agvBindCtnrAndBinParam.setCtnrTyp("1"); |
| | | ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV容器绑定", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam); |
| | | |
| | | wrkMast.setTakeNone("2"); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | } else { |