| | |
| | | } |
| | | } |
| | | if (rgvProtocol.getTaskNo1()!=0 && rgvProtocol.getTaskNo1()!=9999){ |
| | | // if (rgvProtocol.getTaskNo1()==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(),"2415"); |
| | | // rgvThread.setPakMk(true); |
| | | // break; |
| | | // } |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1().intValue()); |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1()); |
| | | if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getWrkSts()!=1){ |
| | | log.error("未查到小车执行任务或者执行任务状态不符合!"+wrkMastSta); |
| | | continue; |
| | |
| | | continue; |
| | | } |
| | | } |
| | | // else { |
| | | // log.error("rgv任务完成给输送线下发命令,但未查询到工作档"); |
| | | // // 下发站点信息 |
| | | // Map<Integer,Integer> map = new HashMap<>(); |
| | | // map.put(101,102);map.put(112,111); |
| | | // map.put(100,100); |
| | | // staProtocol.setWorkNo(rgvProtocol.getTaskNo1().intValue()); |
| | | // staProtocol.setStaNo(map.get(rgvProtocol.getRgvPosI()).shortValue()); |
| | | // devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | //// log.error("rgv任务完成给输送线下发命令:"+wrkMast.getWrkNo()+","+wrkMast.getStaNo()); |
| | | // if (!MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol))) { |
| | | // continue; |
| | | // } |
| | | // } |
| | | int sourceSta = wrkMast.getSourceStaNo(); |
| | | boolean rgvComplete = false; |
| | | |
| | |
| | | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | break; |
| | | } |
| | | WrkMast wrkMast1 = wrkMastService.selectByWrkNo(rgvProtocol.getTaskNo1().intValue()); |
| | | WrkMast wrkMast1 = wrkMastService.selectByWrkNo(rgvProtocol.getTaskNo1()); |
| | | wrkMast1.setPdcType("Y"); |
| | | |
| | | wrkMastService.updateById(wrkMast1); |
| | |
| | | }catch (Exception e){ |
| | | log.error("小车复位线程报错!"+e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * rgv出入库任务下发 |
| | | */ |
| | | public synchronized void rgvIoExecute(Integer mark) { |
| | | 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; |
| | | } |
| | | BasRgv basRgv = basRgvService.selectById(rgvSlave.getRgvNo()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!4", rgvSlave.getRgvNo()); |
| | | continue; |
| | | } |
| | | |
| | | // 只有当堆垛机空闲 并且 无任务时才继续执行 |
| | | if (rgvProtocol.getStatusType() == CrnStatusType.IDLE && rgvProtocol.getTaskNo() == 0 && rgvProtocol.getModeType() == CrnModeType.AUTO |
| | | && rgvProtocol.getLoaded() == 0 && rgvProtocol.getForkPos() == 0) { |
| | | News.warnNoLog(""+mark+" - 0"+" - 开始执行堆垛机入出库作业下发"); |
| | | // 如果最近一次是入库模式 |
| | | if (rgvProtocol.getLastIo().equals("I")) { |
| | | if (basCrnp.getInEnable().equals("Y")) { |
| | | //mark - 1 - .... |
| | | this.crnStnToLoc(crn, crnProtocol,mark); // 入库 |
| | | crnProtocol.setLastIo("O"); |
| | | } else if (basCrnp.getOutEnable().equals("Y")) { |
| | | //mark - 2 - .... |
| | | this.locToCrnStn(crn, crnProtocol,mark); // 出库 |
| | | crnProtocol.setLastIo("I"); |
| | | } |
| | | } |
| | | // 如果最近一次是出库模式 |
| | | else if (crnProtocol.getLastIo().equals("O")) { |
| | | if (basCrnp.getOutEnable().equals("Y")) { |
| | | this.locToCrnStn(crn, crnProtocol,mark); // 出库 |
| | | crnProtocol.setLastIo("I"); |
| | | } else if (basCrnp.getInEnable().equals("Y")) { |
| | | this.crnStnToLoc(crn, crnProtocol,mark); // 入库 |
| | | crnProtocol.setLastIo("O"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | // News.infoNoLog(""+mark+" - 0"+" - 堆垛机入出库作业下发执行完成"); |
| | | } |
| | | /** |
| | | * 执行小车搬运任务 |
| | |
| | | List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); |
| | | for (WrkMastSta wrkMastSta : wrkMastStaList){ |
| | | List<Integer> staNos = Arrays.asList(1042, 1105, 1038, 1036, 2037);//入库口 |
| | | if (staNos.contains(wrkMastSta.getStaStart())) { |
| | | if (staNos.contains(wrkMastSta.getStaStart())) {//非入库口(出库口)限制 |
| | | continue; |
| | | } |
| | | boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //命令下发 |
| | |
| | | // 根据输送线plc遍历 |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | // 遍历入库口 入库预调度 |
| | | for() |
| | | List<Integer> staNos = Arrays.asList(1042, 1043, 1105, 1104); |
| | | for (Integer staNo : staNos) { |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | |
| | | |
| | | // RGV ===>> 小车任务作业下发 |
| | | try{ |
| | | //RGV小车出入口下发 |
| | | mainService.rgvIoExecute(11); |
| | | //小车取货下发 |
| | | mainService.rgvRunWrkMastFullSta(); |
| | | //小车放货任务更新 |
| | | //小车预调度 |
| | | mainService.rgvPreScheduling(); |
| | | }catch (Exception e){ |
| | | log.error("RGV ===>> 小车任务作业下发异常"+e); |
| | |
| | | // RGV出库目标站点 |
| | | private List<RgvStn> rgvDestStn = new ArrayList<>(); |
| | | |
| | | // RGV入库取货站点 |
| | | private List<RgvStn> rgvInTStn = new ArrayList<>(); |
| | | // RGV入库放货站点 |
| | | private List<RgvStn> rgvInPStn = new ArrayList<>(); |
| | | // RGV出库取货站点 |
| | | private List<RgvStn> rgvOutTStn = new ArrayList<>(); |
| | | //RGV出库放货站点 |
| | | private List<RgvStn> rgvOutPStn = new ArrayList<>(); |
| | | |
| | | @Data |
| | | public static class RgvStn { |
| | | |
| | |
| | | command2.setTaskNo2(0); // 工作号 |
| | | command2.setAckFinish2(true); // 任务完成确认位 |
| | | command2.setTaskStatus2(RgvTaskStatusType.NONE); // 任务模式 |
| | | command2.setSourceStaNo2((short)0); // 源站 |
| | | command2.setDestinationStaNo2((short)0); // 目标站 |
| | | command2.setTargetPosition2( 0); // 源站 |
| | | command2.setEndStaNo2(0); // 目标站 |
| | | command2.setCommand(false); |
| | | write2(command2); |
| | | break; |
| | |
| | | port: 502 |
| | | rack: 0 |
| | | slot: 0 |
| | | #RGV入库源站点 |
| | | rgvInSStn[0]: |
| | | #RGV入库取货站点 |
| | | rgvInTStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 100 |
| | | rgvInSStn[1]: |
| | | staNo: 1042 |
| | | rgvInTStn[1]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 101 |
| | | #RGV出库源站点 |
| | | rgvOutSStn[0]: |
| | | staNo: 1105 |
| | | rgvInTStn[2]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 110 |
| | | rgvOutSStn[1]: |
| | | staNo: 1038 |
| | | rgvInTStn[3]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 112 |
| | | #RGV目标站点 |
| | | rgvDestStn[0]: |
| | | staNo: 1036 |
| | | #RGV入库放货站点 |
| | | rgvInPStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 102 |
| | | rgvDestStn[1]: |
| | | staNo: 1004 |
| | | rgvInPStn[1]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 103 |
| | | staNo: 1014 |
| | | rgvInPStn[2]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 1018 |
| | | rgvInPStn[3]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 1028 |
| | | rgvInPStn[4]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 1035 |
| | | #RGV出库取货站点 |
| | | rgvOutTStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 1007 |
| | | rgvOutTStn[1]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 1010 |
| | | rgvOutTStn[2]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 1021 |
| | | rgvOutTStn[3]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 1024 |
| | | rgvOutTStn[4]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 1031 |
| | | #RGV出库放货站点 |
| | | rgvOutPStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 1106 |
| | | rgvOutPStn[1]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 1041 |
| | | rgvOutPStn[2]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 1036 |
| | | |
| | | # RGV穿梭车2 |
| | | rgv[1]: |
| | | id: 2 |
| | |
| | | port: 502 |
| | | rack: 0 |
| | | slot: 0 |
| | | #RGV入库源站点 |
| | | rgvInSStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 100 |
| | | rgvInSStn[1]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 101 |
| | | #RGV出库源站点 |
| | | rgvOutSStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 110 |
| | | rgvOutSStn[1]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 112 |
| | | #RGV目标站点 |
| | | rgvDestStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 102 |
| | | rgvDestStn[1]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 103 |
| | | #RGV入库取货站点 |
| | | rgvInTStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[1].id} |
| | | staNo: 2037 |
| | | #RGV入库放货站点 |
| | | rgvInPStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[1].id} |
| | | staNo: 2006 |
| | | rgvInPStn[1]: |
| | | devpPlcId: ${wcs-slave.devp[1].id} |
| | | staNo: 2012 |
| | | rgvInPStn[2]: |
| | | devpPlcId: ${wcs-slave.devp[1].id} |
| | | staNo: 2018 |
| | | rgvInPStn[3]: |
| | | devpPlcId: ${wcs-slave.devp[1].id} |
| | | staNo: 2024 |
| | | rgvInPStn[4]: |
| | | devpPlcId: ${wcs-slave.devp[1].id} |
| | | staNo: 2030 |
| | | #RGV出库取货站点 |
| | | rgvOutTStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[1].id} |
| | | staNo: 2003 |
| | | rgvOutTStn[1]: |
| | | devpPlcId: ${wcs-slave.devp[1].id} |
| | | staNo: 2009 |
| | | rgvOutTStn[2]: |
| | | devpPlcId: ${wcs-slave.devp[1].id} |
| | | staNo: 2015 |
| | | rgvOutTStn[3]: |
| | | devpPlcId: ${wcs-slave.devp[1].id} |
| | | staNo: 2021 |
| | | rgvOutTStn[4]: |
| | | devpPlcId: ${wcs-slave.devp[1].id} |
| | | staNo: 2027 |
| | | #RGV出库放货站点 |
| | | rgvOutPStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[1].id} |
| | | staNo: 2031 |
| | | # 输送线1 |
| | | devp[0]: |
| | | id: 1 |
| | |
| | | "stns": [ |
| | | {"type": "track", "id": "lb_trCart11", "text": "", "top": 65, "left": 1000, "width": 6, "height": 560}, |
| | | {"type": "track", "id": "lb_trCart12", "text": "", "top": 65, "left": 1020, "width": 6, "height": 560}, |
| | | { "type": "stn", "id": "site-1", "text": "1", "top": 84, "left": 984, "width": 30, "height": 20 }, |
| | | { "type": "stn", "id": "site-2", "text": "2", "top": 84, "left": 1016, "width": 30, "height": 20 }, |
| | | { "type": "stn", "id": "site-2", "text": "2", "top": 84, "left": 984, "width": 30, "height": 20 }, |
| | | { "type": "stn", "id": "site-1", "text": "1", "top": 84, "left": 1016, "width": 30, "height": 20 }, |
| | | |
| | | { "type": "stn", "id": "site-1001", "text": "1001", "top": 84, "left": 870, "width": 35, "height": 20 }, |
| | | { "type": "stn", "id": "site-1002", "text": "1002", "top": 84, "left": 907, "width": 35, "height": 20 }, |
| | |
| | | "width": 2900, |
| | | "height": 600, |
| | | "stns": [ |
| | | { "type": "stn", "id": "site-3", "text": "1", "top": 84, "left": 984, "width": 30, "height": 20 }, |
| | | { "type": "stn", "id": "site-4", "text": "2", "top": 84, "left": 1016, "width": 30, "height": 20 }, |
| | | { "type": "stn", "id": "site-4", "text": "2", "top": 84, "left": 984, "width": 30, "height": 20 }, |
| | | { "type": "stn", "id": "site-3", "text": "1", "top": 84, "left": 1016, "width": 30, "height": 20 }, |
| | | {"type": "track", "id": "lb_trCart21", "text": "", "top": 65, "left": 1000, "width": 6, "height": 560}, |
| | | {"type": "track", "id": "lb_trCart22", "text": "", "top": 65, "left": 1020, "width": 6, "height": 560}, |
| | | { "type": "stn", "id": "site-2003", "text": "2003", "top": 84, "left": 926, "width": 54, "height": 20 }, |