| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.transaction.interceptor.TransactionAspectSupport; |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | continue; |
| | | } |
| | | |
| | | if(!staProtocol.isAutoing()){ |
| | | continue; |
| | | } |
| | | |
| | | |
| | | String barcode = barcodeThread.getBarcode(); |
| | | |
| | |
| | | continue; |
| | | } |
| | | if (!staProtocol.isPakMk()) { |
| | | continue; |
| | | } |
| | | if(!staProtocol.isAutoing()){ |
| | | continue; |
| | | } |
| | | // led 异常显示 |
| | |
| | | //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() == 1) { |
| | | if (crnProtocol.getBay() == 52) { |
| | | return; |
| | | } |
| | | BasCrnp basCrnp = basCrnpService.selectOne( |
| | | new EntityWrapper<BasCrnp>().eq("crn_no", crnProtocol.getCrnNo()) |
| | | ); |
| | | 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; |
| | |
| | | } |
| | | crnThread.setBackHpFlag(true); |
| | | } |
| | | |
| | | // } |
| | | } |
| | | |
| | | /** |
| | |
| | | // 状态:等待确认 并且 任务完成位 = 1 |
| | | if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) { |
| | | News.warnNoLog("" + mark + " - 0" + " - 开始执行对工作档的完成操作,任务号:" + crnProtocol.getTaskNo()); |
| | | |
| | | |
| | | |
| | | // 堆垛机复位 |
| | | News.warnNoLog("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号={}", crnThread.getCrnProtocol().getCrnNo()); |
| | | crnThread.setResetFlag(true); |
| | |
| | | } else { |
| | | total = locDetl.getAnfme(); |
| | | } |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total)); |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getBoxType3(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),wrkDetl.getAnfme(),total)); |
| | | }); |
| | | } |
| | | if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) { |
| | |
| | | total = locDetl.getAnfme(); |
| | | } |
| | | if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) { |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total)); |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getBoxType3(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),wrkDetl.getAnfme(),total)); |
| | | } |
| | | if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) { |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total)); |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getBoxType3(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),wrkDetl.getAnfme(),total)); |
| | | } |
| | | if (wrkMast.getIoType() == 107) { |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total)); |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getBoxType3(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),wrkDetl.getAnfme(),total)); |
| | | } |
| | | }); |
| | | } |
| | |
| | | } |
| | | |
| | | public synchronized void autoEmptyIn() { |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | List<Integer> list = new ArrayList<>(); |
| | | List<WrkMast> wrkMast = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("source_sta_no",1038)); |
| | | if(wrkMast.size() >3){ |
| | | return; |
| | | } |
| | | list.add(1038); |
| | | for (Integer site:list){ |
| | | StaProtocol staProtocol = devpThread.getStation().get(site); |
| | |
| | | staProtocol.setStaNo(site.shortValue()); |
| | | devpThread.setPakMk(site,false); |
| | | MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol)); |
| | | Date now = new Date(); |
| | | System.out.println("小车下发命令时间:" + |
| | | new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(now)); |
| | | |
| | | |
| | | } else { |
| | | News.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/auto/emptyIn/v1", JSON.toJSONString(locTypeDto), response); |
| | | } |
| | |
| | | |
| | | } |
| | | |
| | | // if(rgvProtocol.getStatusType1() == RgvStatusType.IDLE && rgvProtocol.getTaskNo1() == 0 && rgvThread.isPakIn() && rgvThread.isPakRgv()){ |
| | | // rgvPreScheduling();//若暂无下发任务预调度提前到取货点 |
| | | // } |
| | | |
| | | |
| | | if(rgvProtocol.getStatusType1() == RgvStatusType.IDLE && |
| | | rgvProtocol.getModeType() == RgvModeType.AUTO && rgvThread.isPakMk() |
| | | && 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);//若暂无下发任务预调度提前到取货点 |
| | | } |
| | | } else if (basRgv.getOutEnable().equals("1") && basRgv.getPakOut().equals("1")) { |
| | | //mark - 2 - .... |
| | | if (rgvProtocol.getTaskNo2()==0){ |
| | | this.rgvPreSchedulingOut(rgv, rgvProtocol); // 出库 |
| | | } |
| | | } |
| | | } |
| | | // 如果最近一次是出库模式 |
| | | else if (rgvProtocol.getLastIo().equals("O")) { |
| | | if (basRgv.getOutEnable().equals("1") && basRgv.getPakOut().equals("1")) { |
| | | if (rgvProtocol.getTaskNo2()==0){ |
| | | this.rgvPreSchedulingOut(rgv, rgvProtocol); // 出库 |
| | | } |
| | | } else if (basRgv.getInEnable().equals("1") && basRgv.getPakIn().equals("1")) { |
| | | if (rgvProtocol.getTaskNo1()==0){ |
| | | rgvPreSchedulingIn(rgv, rgvProtocol);//若暂无下发任务预调度提前到取货点 |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | /** |
| | |
| | | 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); |
| | |
| | | /** |
| | | * 小车预调度 |
| | | */ |
| | | // public synchronized void rgvPreScheduling(){ |
| | | // try{ |
| | | // List<BasRgvMap> basRgvMaps = basRgvMapService.selectList(new EntityWrapper<>()); |
| | | // for (BasRgvMap rgvSlave:basRgvMaps) { |
| | | // RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getRgvNo()); |
| | | // RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | // if (rgvProtocol == null) { |
| | | // continue; |
| | | // }else { |
| | | // rgvProtocol = rgvProtocol.clone(); |
| | | // } |
| | | // BasRgv basRgv = basRgvService.selectById(rgvSlave.getRgvNo()); |
| | | // if (basRgv == null) { |
| | | // log.error("{}号RGV尚未在数据库进行维护!4", rgvSlave.getRgvNo()); |
| | | // continue; |
| | | // } |
| | | // |
| | | // // 只有当RGV空闲、自动,工位一无物//rgv可用 才进行预调度 |
| | | // if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | // && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | // && !rgvProtocol.isLoaded1ing() |
| | | // && rgvProtocol.getTaskNo1() == 0 |
| | | // && !rgvProtocol.isLoaded2ing() |
| | | // && rgvProtocol.getTaskNo2() == 0 |
| | | // && rgvThread.isPakMk() |
| | | // ) { |
| | | // BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | // if (basRgvMap == null) { |
| | | // log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); |
| | | // continue; |
| | | // } |
| | | // List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); |
| | | // basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | | // // 根据输送线plc遍历 |
| | | // for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | // // 遍历入库口 入库预调度 |
| | | // List<Integer> staNos = Arrays.asList( 1043, 1104, 1029, 1022, 1019, 1008, 1005); |
| | | // for (Integer staNo : staNos) { |
| | | // SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | // StaProtocol staProtocol = devpThread.getStation().get(staNo); |
| | | // if(staProtocol.isLoading()){ |
| | | // RgvCommand rgvCommand = new RgvCommand(); |
| | | // rgvCommand.setRgvNo((int) rgvProtocol.getRgvNo()); // RGV编号 |
| | | // rgvCommand.setAckFinish1(false); // 工位1任务完成确认位 |
| | | // rgvCommand.setTaskNo(9999); // 工位1工作号 |
| | | // rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 工位1任务模式: 移动 |
| | | // switch (staNo){ |
| | | // case 1043: rgvCommand.setTargetPosition1(1042);break; //工位1目标站点 |
| | | // case 1104: rgvCommand.setTargetPosition1(1105);break; |
| | | // case 1037: rgvCommand.setTargetPosition1(1036);break; |
| | | // |
| | | // } |
| | | // if(Objects.equals(basRgvMap.getNowRoute(), staNo)){ |
| | | // continue; |
| | | // } |
| | | // rgvCommand.setCommand(true); //工位1任务确认 |
| | | // if (!MessageQueue.offer(SlaveType.Rgv, (int) rgvProtocol.getRgvNo(), new Task(4, rgvCommand))) { |
| | | // //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | // log.error("RGV命令下发失败,RGV号={},任务数据={}", (int) rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // } |
| | | // |
| | | // } |
| | | // } |
| | | // }catch (Exception e){ |
| | | // log.error("执行小车移动下发失败"); |
| | | // } |
| | | // } |
| | | public synchronized void rgvPreSchedulingIn(RgvSlave slave, RgvProtocol rgvProtocol){ |
| | | for (RgvSlave.RgvStn rgvStn : slave.getRgvInTStn()) {//rgv入库取货站点 |
| | | boolean flag = false; |
| | | BasRgv basRgv = basRgvService.selectById(slave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!4", slave.getId()); |
| | | continue; |
| | | } |
| | | if(rgvStn.getStaNo2() == null){ |
| | | continue; |
| | | } |
| | | //遍历rgv入库取货站点 |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(rgvStn.getStaNo2()); //倒数第二个 |
| | | StaProtocol staProtocol2 = null; //连续取货任务站点 |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, (int) rgvProtocol.getRgvNo()); |
| | | WrkMastSta wrkMastSta3 = null;//连取两个 |
| | | Integer staNo = null; //与调度 |
| | | switch (rgvStn.getStaNo2()){ |
| | | case 1043: staNo = 1044;break; |
| | | case 1104: staNo = 1103;break; |
| | | } |
| | | if(staNo != null ){ |
| | | staProtocol2 = devpThread.getStation().get(staNo); |
| | | 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; |
| | | } |
| | | if((staProtocol.getWorkNo()>9999 && staProtocol2.getWorkNo()>9999) || (staProtocol.getWorkNo()<10000 && staProtocol2.getWorkNo()<10000)){ |
| | | //当连续取货站点为相同类型时才能连续取 |
| | | wrkMastSta3 = wrkMastStaMapper.selectByWrkNo(staProtocol2.getWorkNo()); |
| | | } |
| | | |
| | | } |
| | | if(rgvProtocol.getTaskNo2() > 9999 && staProtocol.getWorkNo() < 10000){ |
| | | continue; |
| | | } |
| | | |
| | | 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.getCanining() != null && staDetl.getCanining().equals("Y")) { |
| | | flag = true; |
| | | } |
| | | if (!flag) { |
| | | News.errorNoLog(" - 3" + " - Rgv入库取货站信息(以下需要全true):" |
| | | + "自动信号" + staProtocol.isAutoing() + "有物信号" + staProtocol.isLoading() |
| | | + "工作号>0" + staProtocol.getWorkNo() + "能入信号(wms设置).equals(\"Y\")" + staDetl.getCanining()); |
| | | 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()));//根据站点工作号和小车工作范围检索任务档 |
| | | if( null == wrkMastSta ) { |
| | | News.infoNoLog(" - 查询无待入库数据--wrk_sts0, 工作号={}", staProtocol.getWorkNo()); |
| | | continue; |
| | | } |
| | | WrkMastSta wrkMastSta2 = null; |
| | | if(rgvProtocol.getTaskNo2() != null){ |
| | | wrkMastSta2 = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2()); |
| | | } |
| | | boolean result = false; |
| | | if(wrkMastSta2 != null && rgvProtocol.getRgvNo() == 1){ //距离计算 2楼单入库口不需要计算 |
| | | result = rgvCalcDistance((int) rgvProtocol.getRgvNo(),wrkMastSta2.getStaEnd(),wrkMastSta.getStaStart());//工位2放货站点,工位1取货站点 |
| | | } |
| | | if(result){//若小车距离放货点距离近于取货点则跳过取货 true跳过取货/false优先取货 |
| | | basRgv.setPakRgv("0"); |
| | | basRgvService.updateById(basRgv); |
| | | |
| | | // rgvThread.setPakRgv(false); |
| | | continue; |
| | | } |
| | | wrkMastSta.setWorkSta(wrkMastSta2 !=null ? 1 : 2); |
| | | wrkMastSta.setRgvNo((int) rgvProtocol.getRgvNo()); |
| | | boolean sign = false; |
| | | sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //命令下发 |
| | | if (sign){ |
| | | |
| | | if(wrkMastSta3 != null ){ |
| | | List<WrkMastSta> wrkMastStaPaking = wrkMastStaService.selectPakingWrk(wrkMastSta3.getStaStart()); |
| | | if(wrkMastStaPaking.size() < 1 && !wrkMastSta3.getWrkNo().equals(wrkMastSta.getWrkNo())){//已有标记不再标记 |
| | | wrkMastSta3.setMk(1); |
| | | basRgv.setPakAll("0"); |
| | | basRgvService.updateById(basRgv); |
| | | |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta3); |
| | | log.error("锁定相隔站点任务"); |
| | | }catch (Exception e){ |
| | | log.error("锁定相隔站点任务失败"); |
| | | } |
| | | } |
| | | } |
| | | basRgv.setPakOut("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()); |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | |
| | | type = RgvTaskStatusType.PUT; //放货 |
| | | targetPosition = wrkMastSta.getStaEnd(); |
| | | } |
| | | Date now = new Date(); |
| | | if (targetPosition == 1038) { |
| | | System.out.println("小车下发命令时间:" + |
| | | new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(now)); |
| | | } |
| | | |
| | | rgvCommand.setTaskNo(Math.toIntExact(wrkMastSta.getWrkNo())); // 工位工作号 |
| | | rgvCommand.setTaskStatus(type); // 工位任务模式: 取货 |
| | | rgvCommand.setTargetPosition(targetPosition); //工位目标站点 |
| | |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | if(!staProtocol.isLoading()){ |
| | | continue; |
| | | } |
| | | String barcode = staProtocol.getBarcode(); |
| | | if(!Cools.isEmpty(barcode)) { |
| | | if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { |
| | |
| | | .eq("sta_no", basArm.getStaNoSou()) |
| | | .eq("status", 0) |
| | | ); |
| | | if (basArmMastList.isEmpty()){ |
| | | if (basArmMastList.isEmpty()){ |
| | | continue; |
| | | } |
| | | if (basArmMastList.size()>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 agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast); |
| | | agvBindCtnrAndBinParam.setCtnrCode(basAgvMast.getTimestamp().toString()); |
| | | agvBindCtnrAndBinParam.setCtnrTyp("1"); |
| | | ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV出库容器绑定解绑", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam); |
| | | |
| | | ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV出库容器解绑", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam); |
| | | break; |
| | | } |
| | | }catch (Exception e){ |
| | | News.error(JSON.toJSONString(e.getMessage())); |
| | |
| | | |
| | | } |
| | | WrkMast wrkMast = wrkMastService.selectByWrkNo(staProtocol.getWorkNo()); |
| | | if(Cools.isEmpty(wrkMast)){ |
| | | continue; |
| | | } |
| | | if(wrkMast.getIoType() == 110 ){ |
| | | BasAgvMast basAgvMast = new BasAgvMast(); |
| | | List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("task_no", staProtocol.getWorkNo())); |
| | | if(!basAgvMastList.isEmpty()){ |
| | | continue; |
| | | } |
| | | |
| | | try { |
| | | LocTypeDto locTypeDto = new LocTypeDto(staProtocol); |
| | | |
| | | SearchLocParam param = new SearchLocParam(); |
| | | param.setBarcode(staProtocol.getWorkNo().toString()); |
| | | param.setIoType(1); |
| | | param.setSourceStaNo(outStaAgv.getStaNo()); |
| | | param.setLocType1(locTypeDto.getLocType1()); |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/rpc/pakin/agv/loc/v1") |
| | | .setJson(JSON.toJSONString(param)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | StartupDto dto = jsonObject.getObject("data", StartupDto.class); |
| | | basAgvMast.setFloorNo(1); |
| | | basAgvMast.setTaskNo(staProtocol.getWorkNo()); |
| | | basAgvMast.setSourceStaNo(outStaAgv.getStaNo()); |
| | | basAgvMast.setLocNo(dto.getLocNo()); |
| | | basAgvMast.setBarcode("1"); |
| | | basAgvMast.setSourceLocNo("1041"); |
| | | basAgvMast.setDevpId(devp.getId()); |
| | | basAgvMast.setIoType(2); |
| | | basAgvMastService.insert(basAgvMast); |
| | | LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",dto.getLocNo())); |
| | | locMast.setLocSts("S"); |
| | | locMastService.updateById(locMast); |
| | | |
| | | AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast); |
| | | agvBindCtnrAndBinParam.setCtnrCode(basAgvMast.getTimestamp().toString()); |
| | | agvBindCtnrAndBinParam.setCtnrTyp("1"); |
| | | ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV出库容器解绑", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam); |
| | | |
| | | } |
| | | }catch (Exception e){ |
| | | News.error(JSON.toJSONString(e.getMessage())); |
| | | |
| | | } |
| | | } |
| | | if (Cools.isEmpty(wrkMast) || Cools.isEmpty(wrkMast.getTakeNone()) || !wrkMast.getTakeNone().equals("1")){ |
| | | continue; |
| | | } |
| | |
| | | basAgvMastService.insert(basAgvMast); |
| | | AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast); |
| | | agvBindCtnrAndBinParam.setCtnrCode(basAgvMast.getBarcode()); |
| | | if(basAgvMast.getFloorNo() == 3){ |
| | | LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",dto.getLocNo())); |
| | | locMast.setBarcode(wrkMast.getBarcode()); |
| | | locMastService.updateById(locMast); |
| | | } |
| | | agvBindCtnrAndBinParam.setCtnrTyp("1"); |
| | | ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV容器绑定", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam); |
| | | |
| | | wrkMast.setTakeNone("2"); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | } else { |