| | |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 |
| | | //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | && ((rgvProtocol.getTaskNo1()==0 && rgvProtocol.getLoaded1()==0) |
| | | || (rgvProtocol.getTaskNo1()>0 && rgvProtocol.getLoaded1()==1)) |
| | | && rgvProtocol.getTaskNo2()==0 |
| | | // && (rgvProtocol.getLoaded2()==2 || rgvProtocol.getLoaded2()==3 ) ////0 无物;1 一层无物二层有物 ;2一层有物二层无物 (只能满放);3 1、2层都有物 4:()只允许拆盘 |
| | | && rgvProtocol.getLoaded2()==3 ////0 无物;1 一层无物二层有物 ;2一层有物二层无物 (只能满放);3 1、2层都有物 4:()只允许拆盘 |
| | | ) { |
| | |
| | | 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()); |
| | | boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1()); |
| | | if (!rgvComplete){ |
| | | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | } |
| | |
| | | // |
| | | // } |
| | | }*/ |
| | | boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); |
| | | boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1()); |
| | | if (!rgvComplete){ |
| | | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | break; |
| | |
| | | // 只有当RGV空闲、自动,工位一无物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && (rgvProtocol.getStatusType2() == RgvStatusType.IDLE || (rgvProtocol.getStatusType2() == RgvStatusType.SOS100 && rgvProtocol.getTaskNo2()==0)) |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && (rgvProtocol.getLoaded1()==0 || (rgvProtocol.getLoaded1()==1 && rgvProtocol.getTaskNo1()!=0) ) |
| | | && (rgvProtocol.getTaskNo1()==0 || (rgvProtocol.getLoaded1()==1 && rgvProtocol.getTaskNo1()!=0) ) |
| | | //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | && ((rgvProtocol.getTaskNo1()==0 && rgvProtocol.getLoaded1()==0) |
| | | || (rgvProtocol.getTaskNo1()>0 && rgvProtocol.getLoaded1()==1)) |
| | | && rgvProtocol.getTaskNo2()==0 |
| | | ) { |
| | | switch (sign){ |
| | |
| | | break; |
| | | case 6:////提升 |
| | | // signWork = qwe(); |
| | | signWork = rgvRunWrkMastMove(rgvSlave); |
| | | break; |
| | | default: |
| | | break; |
| | |
| | | // 只有当RGV空闲、自动,工位一无物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && (rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | || (rgvProtocol.getStatusType2() == RgvStatusType.SOS100 && rgvProtocol.getTaskNo2()==0)) |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getLoaded1()==0 |
| | | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 |
| | |
| | | // 只有当RGV空闲、自动,工位一无物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && (rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | || (rgvProtocol.getStatusType2() == RgvStatusType.SOS100 && rgvProtocol.getTaskNo2()==0)) |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getLoaded1()==0 |
| | | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 |
| | |
| | | } |
| | | } else if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && (rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | || (rgvProtocol.getStatusType2() == RgvStatusType.SOS100 && rgvProtocol.getTaskNo2()==0)) |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getLoaded1()==1 |
| | | && rgvProtocol.getTaskNo1()!=0 && rgvProtocol.getTaskNo2()==0 |
| | |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 |
| | | //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | && ((rgvProtocol.getTaskNo1()==0 && rgvProtocol.getLoaded1()==0) |
| | | || (rgvProtocol.getTaskNo1()>0 && rgvProtocol.getLoaded1()==1)) |
| | | && 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()); |
| | |
| | | // 只有当RGV空闲、自动,工位二有物//rgv可用//拆盘 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && (rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | || (rgvProtocol.getStatusType2() == RgvStatusType.SOS100 && rgvProtocol.getTaskNo2()==0)) |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getLoaded1()==1 |
| | | && rgvProtocol.getTaskNo1()!=0 && rgvProtocol.getTaskNo2()==0 |
| | |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 |
| | | //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | && ((rgvProtocol.getTaskNo1()==0 && rgvProtocol.getLoaded1()==0) |
| | | || (rgvProtocol.getTaskNo1()>0 && rgvProtocol.getLoaded1()==1)) |
| | | && rgvProtocol.getTaskNo2()==0 |
| | | && (rgvProtocol.getLoaded2()==2 || rgvProtocol.getLoaded2()==3 ) ////0 无物;1 一层无物二层有物 ;2一层有物二层无物 (只能满放);3 1、2层都有物 4:()只允许拆盘 |
| | | ) { |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 |
| | | //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | && ((rgvProtocol.getTaskNo1()==0 && rgvProtocol.getLoaded1()==0) |
| | | || (rgvProtocol.getTaskNo1()>0 && rgvProtocol.getLoaded1()==1)) |
| | | && rgvProtocol.getTaskNo2()==0 |
| | | && (rgvProtocol.getLoaded2()==0 || rgvProtocol.getLoaded2()==1 ) //现场修改:叠盘机,////0 无物;1 一层无物二层有物(只能拆叠) ;2一层有物二层无物 (只能满放);3 1、2层都有物 4:()只允许拆盘 |
| | | ) { |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | |
| | | // 只有当RGV空闲、自动,工位二无物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && (rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | || (rgvProtocol.getStatusType2() == RgvStatusType.SOS100 && rgvProtocol.getTaskNo2()==0)) |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getLoaded1() == 0 |
| | | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 |
| | |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 |
| | | //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | && ((rgvProtocol.getTaskNo1()==0 && rgvProtocol.getLoaded1()==0) |
| | | || (rgvProtocol.getTaskNo1()>0 && rgvProtocol.getLoaded1()==1)) |
| | | && rgvProtocol.getTaskNo2()==0 |
| | | && rgvProtocol.getLoaded2()==0 //现场修改:叠盘机,////0 无物;1 一层无物二层有物(只能拆叠) ;2一层有物二层无物 (只能满放);3 1、2层都有物 4:()只允许拆盘 |
| | | ) { |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | |
| | | } |
| | | return false; |
| | | } |
| | | public synchronized boolean rgvRunWrkMastMove(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.getStatusType2() == RgvStatusType.SOS100 && rgvProtocol.getTaskNo2()==0)) |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | && ((rgvProtocol.getTaskNo1()==0 && rgvProtocol.getLoaded1()==0) |
| | | || (rgvProtocol.getTaskNo1()>0 && rgvProtocol.getLoaded1()==1)) |
| | | && rgvProtocol.getTaskNo2()==0 |
| | | ) { |
| | | 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.getWrkType()!=4){// 2:空板 || 工作类型 1:取(叠盘) 2:拆盘 5:满取 6:满放 4 移动 |
| | | continue; |
| | | } |
| | | boolean sign = false; |
| | | if ( wrkMastSta.getStaEnd()!=0){//放 |
| | | sign = rgvAvoidanceXY(rgvProtocol.getRgvNo(),wrkMastSta);//拆盘 |
| | | }else { |
| | | continue; |
| | | } |
| | | if (sign){ |
| | | boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd()); |
| | | if (signMap){ |
| | | wrkMastSta.setWrkSts(3); |
| | | 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("3989行执行小车取空板任务下发失败"); |
| | | log.error("3989行"+e); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /* |
| | | * 有任务但未执行 此时需要调整小车位置 |
| | |
| | | // 只有当RGV空闲、自动,工位一无物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getLoaded1()==0 //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | && rgvProtocol.getTaskNo1()==0 |
| | | //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | && ((rgvProtocol.getTaskNo1()==0 && rgvProtocol.getLoaded1()==0) |
| | | || (rgvProtocol.getTaskNo1()>0 && rgvProtocol.getLoaded1()==1)) |
| | | && rgvProtocol.getTaskNo2()==0 |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | |
| | | // 只有当RGV空闲、自动,工位一无物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getLoaded1()==0 //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | && rgvProtocol.getTaskNo1()==0 |
| | | //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | && ((rgvProtocol.getTaskNo1()==0 && rgvProtocol.getLoaded1()==0) |
| | | || (rgvProtocol.getTaskNo1()>0 && rgvProtocol.getLoaded1()==1)) |
| | | && rgvProtocol.getTaskNo2()==0 |
| | | ) { |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvSlave.getId()); |
| | |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * 小车XY移动 避让 |
| | | * */ |
| | | public synchronized boolean rgvAvoidanceXY(Integer rgvId,WrkMastSta wrkMastSta){ |
| | | 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( wrkMastSta.getStaEnd().shortValue()); |
| | | 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( wrkMastSta.getStaEnd().shortValue()); |
| | | 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; |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /* |
| | | * 小车取货至工位任务 |