| | |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | StartupDto dto = jsonObject.getObject("data", StartupDto.class); |
| | | |
| | | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); |
| | | |
| | | |
| | | barcodeThread.setBarcode(""); |
| | | staProtocol.setWorkNo(dto.getWorkNo()); |
| | | |
| | |
| | | |
| | | // 更新站点信息 且 下发plc命令 |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo()); |
| | | Integer staNo = wrkMast.getStaNo(); |
| | | if (wrkMast.getSourceStaNo()==145){ |
| | | staNo = 147; |
| | | } |
| | | staProtocol.setStaNo(staNo); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | if (result) { |
| | |
| | | continue; |
| | | } |
| | | |
| | | // 拣、盘、并 作业站转换 |
| | | // int stnNo = 0; |
| | | // if (wrkMast.getStaNo() == 109) { |
| | | // stnNo = 127; |
| | | // } else if (wrkMast.getStaNo() == 113) { |
| | | // stnNo = 128; |
| | | // } else { |
| | | // log.error("{}号任务数据异常!", wrkMast.getWrkNo()); |
| | | // } |
| | | // 获取目标站 |
| | | Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() |
| | | .eq("type_no", wrkMast.getIoType() - 50) |
| | |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep4(staProtocol.getSiteId(),"3"); |
| | | |
| | | if (wrkMast == null) { |
| | | WrkMast wrkMast1 = wrkMastMapper.selectPakInStep5(staProtocol.getSiteId(),"3"); |
| | | if (Cools.isEmpty(wrkMast1) && staProtocol.isEmptyMk()){ |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(staProtocol.getSiteId() + 9999L); |
| | | if (Cools.isEmpty(wrkMastSta)){ |
| | | WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(),staProtocol.getSiteId()); |
| | | wrkMastSta1.setType(2); |
| | | wrkMastSta1.setWrkType(1); |
| | | wrkMastStaMapper.insert(wrkMastSta1); |
| | | } |
| | | continue; |
| | | } |
| | | // WrkMast wrkMast1 = wrkMastMapper.selectPakInStep5(staProtocol.getSiteId(),"3"); |
| | | // if (Cools.isEmpty(wrkMast1) && staProtocol.isEmptyMk()){ |
| | | // WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(staProtocol.getSiteId() + 9999L); |
| | | // if (Cools.isEmpty(wrkMastSta)){ |
| | | // WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(),staProtocol.getSiteId()); |
| | | // wrkMastSta1.setType(2); |
| | | // wrkMastSta1.setWrkType(1); |
| | | // wrkMastStaMapper.insert(wrkMastSta1); |
| | | // } |
| | | // continue; |
| | | // } |
| | | // log.error("站点号"+staProtocol.getSiteId()+"未查询到工作档案!"); |
| | | // 无拣料数据 |
| | | continue; |
| | |
| | | |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 拣料、并板、盘点再入库 拆垛位置 |
| | | */ |
| | | public synchronized void storeEmptyPlt4() { |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | // 遍历叠盘入库口 |
| | | for (DevpSlave.Sta pickSta : devp.getEmptyInSta2()) { |
| | | |
| | | // 获取入库站信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | BasDevp basDevp = basDevpService.selectById(staProtocol.getSiteId()); |
| | | if (Cools.isEmpty(basDevp) || basDevp.getReportSign()!=1){ |
| | | continue; |
| | | } |
| | | |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isPakMk() && staProtocol.getWorkNo()==0 && !staProtocol.isOutEnable() && staProtocol.isInEnable()) { |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep4(staProtocol.getSiteId(),"3"); |
| | | if (wrkMast == null) { |
| | | WrkMast wrkMast1 = wrkMastMapper.selectPakInStep5(staProtocol.getSiteId(),"3"); |
| | | if (Cools.isEmpty(wrkMast1) && staProtocol.isEmptyMk()){ |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(staProtocol.getSiteId() + 19999L); |
| | | if (Cools.isEmpty(wrkMastSta)){ |
| | | WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(),staProtocol.getSiteId()); |
| | | wrkMastSta1.setType(2); |
| | | wrkMastSta1.setWrkType(1); |
| | | wrkMastStaMapper.insert(wrkMastSta1); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | log.error("搜索RGV车。通过目标站搜索哪台车可用"+e); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | // /** |
| | | // * 绑定小车方法 |
| | | // */ |
| | | // public synchronized void rgvBindSte() { |
| | | // //获取等待绑定RGV的任务 |
| | | // List<WrkMast> wrkMasts = wrkMastMapper.selectWaitBindRGV(); |
| | | // for (WrkMast wrkMast : wrkMasts) { |
| | | // //目标站 |
| | | // Integer staNo = wrkMast.getStaNo(); |
| | | // //源站 |
| | | // Integer sourceStaNo = wrkMast.getSourceStaNo(); |
| | | // //通过目标站搜索rgv号 |
| | | // Integer rgvNo=0; |
| | | // if (wrkMast.getCrnNo()==1){ |
| | | // rgvNo=1; |
| | | // }else if (wrkMast.getCrnNo()==6){ |
| | | // rgvNo=2; |
| | | // }else { |
| | | // rgvNo = this.searchRgvNo(staNo); |
| | | // } |
| | | // if (rgvNo == null || rgvNo==0) {//未找到可用的rgv |
| | | // continue; |
| | | // } |
| | | // |
| | | // wrkMast.setRgvNo(rgvNo);//绑定rgv号 |
| | | // wrkMast.setRgvDstaNo(wrkMast.getSourceStaNo());//设置RGV前往工作档源站取货 |
| | | // if (wrkMastMapper.updateById(wrkMast)==0){ |
| | | // log.error("绑定小车更新工作档失败!!! [工作号:{}]", wrkMast.getWrkNo()); |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | /** |
| | | * 绑定小车方法 |
| | | */ |
| | | public synchronized void rgvBindSte() { |
| | | try { |
| | | // 根据输送线plc遍历 |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | if (devp.getId()==2){ |
| | | continue; |
| | | } |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | //入库绑小车 |
| | | for (DevpSlave.Sta Sta : devp.getInRgvSta()) { |
| | | StaProtocol staProtocol = devpThread.getStation().get(Sta.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() < 9990){ |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectList(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol.getWorkNo()).eq("wrk_sts", 2L)); |
| | | if (Cools.isEmpty(wrkMasts) || wrkMasts.size()!=1){ |
| | | continue; |
| | | } |
| | | WrkMast wrkMast = wrkMasts.get(0); |
| | | //目标站 |
| | | Integer staNo = wrkMast.getStaNo(); |
| | | //通过目标站搜索rgv号 |
| | | Integer rgvNo=0; |
| | | if (wrkMast.getCrnNo()==1){ |
| | | rgvNo=1; |
| | | }else if (wrkMast.getCrnNo()==6){ |
| | | rgvNo=2; |
| | | }else { |
| | | rgvNo = this.searchRgvNo(staNo); |
| | | } |
| | | if (rgvNo == null || rgvNo==0) {//未找到可用的rgv |
| | | continue; |
| | | } |
| | | wrkMast.setRgvNo(rgvNo);//绑定rgv号 |
| | | if (wrkMastMapper.updateById(wrkMast)==0){ |
| | | log.error("绑定小车更新工作档失败!!! [工作号:{}]", wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | } |
| | | //出库绑小车 |
| | | for (DevpSlave.Sta Sta : devp.getOutRgvSta()) { |
| | | StaProtocol staProtocol = devpThread.getStation().get(Sta.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() < 9990){ |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectList(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol.getWorkNo()).eq("wrk_sts", 14L)); |
| | | if (Cools.isEmpty(wrkMasts) || wrkMasts.size()!=1){ |
| | | continue; |
| | | } |
| | | WrkMast wrkMast = wrkMasts.get(0); |
| | | //目标站 |
| | | Integer staNo = wrkMast.getStaNo(); |
| | | //通过目标站搜索rgv号 |
| | | Integer rgvNo=0; |
| | | if (wrkMast.getCrnNo()==1){ |
| | | rgvNo=1; |
| | | }else if (wrkMast.getCrnNo()==6){ |
| | | rgvNo=2; |
| | | }else { |
| | | rgvNo = this.searchRgvNo(staNo); |
| | | } |
| | | if (rgvNo == null || rgvNo==0) {//未找到可用的rgv |
| | | continue; |
| | | } |
| | | wrkMast.setRgvNo(rgvNo);//绑定rgv号 |
| | | if (wrkMastMapper.updateById(wrkMast)==0){ |
| | | log.error("绑定小车更新工作档失败!!! [工作号:{}]", wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("绑定小车异常:{}", e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 绑定小车方法 |
| | | */ |
| | | public synchronized void rgvBindSte2() { |
| | | try{ |
| | | for (RgvSlave rgv : slaveProperties.getRgv()) { |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectWaitBindRGVRgvNo(rgv.getId()); |
| | | if (!Cools.isEmpty(wrkMasts) && wrkMasts.size()!=0){ |
| | | continue; |
| | | } |
| | | List<WrkMast> wrkMasts2 = wrkMastMapper.selectWaitBindRgvNo2(rgv.getId()); |
| | | for (WrkMast wrkMast : wrkMasts2) { |
| | | if (wrkMastMapper.selectWaitBindRgvNoOneWrkNo(wrkMast.getWrkNo())!=null){ |
| | | continue; |
| | | } |
| | | //目标站 |
| | | BasDevp basDevp = basDevpService.selectById(wrkMast.getRgvDstaNo()); |
| | | if (Cools.isEmpty(basDevp) || !basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("N") || basDevp.getWrkNo()!=0){ |
| | | continue; |
| | | } |
| | | wrkMastMapper.insertRgvMast(wrkMast.getWrkNo()); |
| | | wrkMastMapper.updateRgvMast(wrkMast.getWrkNo()); |
| | | break; |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("小车搬运任务异常:{}", e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 入出库 ===>> RGV入出库作业下发 |
| | | */ |
| | | public synchronized void rgvIoExecuteOld() { |
| | | 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; |
| | | } |
| | | |
| | | // 只有当RGV空闲、自动, |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | // && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 |
| | | // && rgvProtocol.getLoaded1() == 0 && rgvProtocol.getLoaded2() == 0 |
| | | ) { |
| | | |
| | | //查找是否存在入出库工作中等待RGV搬运的任务 |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectIoRgvNo(rgv.getId()); |
| | | for (WrkMast wrkMast : wrkMasts) { |
| | | if (wrkMast.getWrkSts() == 2) {//2.设备上走1 => 3.RGV取货中 |
| | | if (rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getLoaded1() != 0) {//RGV是否无任务、RGV是否无货 |
| | | continue; |
| | | } |
| | | |
| | | //判断行走路径是否被占用 |
| | | Integer staNo = wrkMast.getSourceStaNo(); |
| | | BasDevp basDevp = basDevpService.selectById(staNo); |
| | | if (basDevp == null) { |
| | | continue;//目标站不存在 |
| | | } |
| | | //起始路径 |
| | | int startPath = rgvProtocol.getRgvPos().intValue(); |
| | | //目标路径值 |
| | | int endPath = basDevp.getLocType3().intValue(); |
| | | // boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用 |
| | | boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用 |
| | | if (pathUsed) { |
| | | //行走路径被占用,禁止下发命令 |
| | | continue; |
| | | } |
| | | //行走路径空闲,锁定路径 |
| | | RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true); |
| | | |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV编号 |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 工位1任务模式: 取货 |
| | | rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue()); //工位1目标站点 |
| | | rgvCommand.setCommand((short) 1); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand)); |
| | | } else { |
| | | // 修改工作档状态 2.设备上走1 => 3.RGV取货中 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(3L); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 2.设备上走1 => 3.RGV取货中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | } else if (wrkMast.getWrkSts() == 14) {//4.RGV取货完成 => 5.RGV放货中 14出库完成 |
| | | if (rgvProtocol.getTaskNo1() == 0 || !rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue())) {//RGV必须有任务且任务和当前工作档一致 |
| | | continue; |
| | | } |
| | | if (rgvProtocol.getLoaded1() == 0) {//RGV必须有物 |
| | | continue; |
| | | } |
| | | |
| | | //判断行走路径是否被占用 |
| | | Integer staNo = wrkMast.getStaNo(); |
| | | BasDevp basDevp = basDevpService.selectById(staNo); |
| | | if (basDevp == null) { |
| | | continue;//目标站不存在 |
| | | } |
| | | //起始路径 |
| | | int startPath = rgvProtocol.getRgvPos().intValue(); |
| | | //目标路径值 |
| | | int endPath = basDevp.getLocType3().intValue(); |
| | | boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用 |
| | | if (pathUsed) { |
| | | //行走路径被占用,禁止下发命令 |
| | | continue; |
| | | } |
| | | //行走路径空闲,锁定路径 |
| | | RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true); |
| | | |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV编号 |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 工位1任务模式: 放货 |
| | | rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue()); //工位1目标站点 |
| | | rgvCommand.setCommand((short) 1); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand)); |
| | | } else { |
| | | // 修改工作档状态 4.RGV取货完成 => 5.RGV放货中 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(5L); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 4.RGV取货完成 => 5.RGV放货中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | } else if (wrkMast.getWrkSts() == 23) {//23.设备上走1 => 24.RGV取货中 |
| | | if (rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getLoaded1() != 0) {//RGV是否无任务、RGV是否无货 |
| | | continue; |
| | | } |
| | | |
| | | //判断行走路径是否被占用 |
| | | Integer staNo = wrkMast.getSourceStaNo(); |
| | | BasDevp basDevp = basDevpService.selectById(staNo); |
| | | if (basDevp == null) { |
| | | continue;//目标站不存在 |
| | | } |
| | | //起始路径 |
| | | int startPath = rgvProtocol.getRgvPos().intValue(); |
| | | //目标路径值 |
| | | int endPath = basDevp.getLocType3().intValue(); |
| | | boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用 |
| | | if (pathUsed) { |
| | | //行走路径被占用,禁止下发命令 |
| | | continue; |
| | | } |
| | | //行走路径空闲,锁定路径 |
| | | RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true); |
| | | |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV编号 |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 工位1任务模式: 取货 |
| | | rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue()); //工位1目标站点 |
| | | rgvCommand.setCommand((short) 1); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand)); |
| | | } else { |
| | | // 修改工作档状态 23.设备上走1 => 24.RGV取货中 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(24L); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 23.设备上走1 => 24.RGV取货中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | } else if (wrkMast.getWrkSts() == 25) {//25.RGV取货完成 => 26.RGV放货中 |
| | | if (rgvProtocol.getTaskNo1() == 0 || !rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue())) {//RGV必须有任务且任务和当前工作档一致 |
| | | continue; |
| | | } |
| | | if (rgvProtocol.getLoaded1() == 0) {//RGV必须有物 |
| | | continue; |
| | | } |
| | | |
| | | //判断行走路径是否被占用 |
| | | Integer staNo = wrkMast.getStaNo(); |
| | | BasDevp basDevp = basDevpService.selectById(staNo); |
| | | if (basDevp == null) { |
| | | continue;//目标站不存在 |
| | | } |
| | | //起始路径 |
| | | int startPath = rgvProtocol.getRgvPos().intValue(); |
| | | //目标路径值 |
| | | int endPath = basDevp.getLocType3().intValue(); |
| | | boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用 |
| | | if (pathUsed) { |
| | | //行走路径被占用,禁止下发命令 |
| | | continue; |
| | | } |
| | | //行走路径空闲,锁定路径 |
| | | RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true); |
| | | |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV编号 |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 工位1任务模式: 放货 |
| | | rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue()); //工位1目标站点 |
| | | rgvCommand.setCommand((short) 1); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand)); |
| | | } else { |
| | | // 修改工作档状态 25.RGV取货完成 => 26.RGV放货中 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(26L); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 25.RGV取货完成 => 26.RGV放货中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 入出库 ===>> RGV入出库作业下发 |
| | | */ |
| | | public synchronized void rgvIoExecute() { |
| | | for (RgvSlave rgv : slaveProperties.getRgv()) { |
| | | RgvSlave rgvSlave=null; |
| | | if (rgv.getId()==1){ |
| | | rgvSlave = slaveProperties.getRgv().get(1); |
| | | }else { |
| | | rgvSlave = slaveProperties.getRgv().get(0); |
| | | } |
| | | |
| | | // 获取RGV信息 |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | continue; |
| | | } |
| | | |
| | | RgvThread rgvThreadSlave = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | RgvProtocol rgvProtocolSlave = rgvThreadSlave.getRgvProtocol(); |
| | | BasRgv basRgvSlave = null; |
| | | if (rgvProtocolSlave == null) { |
| | | rgvSlave=null; |
| | | }else { |
| | | basRgvSlave = basRgvService.selectById(rgv.getId()); |
| | | if (basRgvSlave == null) { |
| | | rgvSlave=null; |
| | | } |
| | | } |
| | | |
| | | BasRgv basRgv = basRgvService.selectById(rgv.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!", rgv.getId()); |
| | | continue; |
| | | } |
| | | |
| | | boolean signSlave=false;//此处判断RgvSlave是否已经规避 |
| | | boolean signSlaveState=false;//此处判断RgvSlave是否空闲 |
| | | Integer staSlave = 0;//此处记录RgvSlave当前位置 |
| | | |
| | | // 只有当RGV空闲、自动, |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | // && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 |
| | | // && rgvProtocol.getLoaded1() == 0 && rgvProtocol.getLoaded2() == 0 |
| | | ) { |
| | | |
| | | //查找是否存在入出库工作中等待RGV搬运的任务 |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectIoRgvNo(rgv.getId()); |
| | | for (WrkMast wrkMast : wrkMasts) { |
| | | if (wrkMast.getWrkSts() == 2) {//2.设备上走1 => 3.RGV取货中 |
| | | if (rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getLoaded1() != 0) {//RGV是否无任务、RGV是否无货 |
| | | continue; |
| | | } |
| | | |
| | | //判断行走路径是否被占用 |
| | | Integer staNo = wrkMast.getSourceStaNo(); |
| | | BasDevp basDevp = basDevpService.selectById(staNo); |
| | | if (basDevp == null) { |
| | | continue;//目标站不存在 |
| | | } |
| | | //起始路径 |
| | | int startPath = rgvProtocol.getRgvPos().intValue(); |
| | | //目标路径值 |
| | | int endPath = basDevp.getLocType3().intValue(); |
| | | // boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用 |
| | | boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用 |
| | | if (pathUsed) { |
| | | //行走路径被占用,禁止下发命令 |
| | | continue; |
| | | } |
| | | //行走路径空闲,锁定路径 |
| | | RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true); |
| | | |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV编号 |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 工位1任务模式: 取货 |
| | | rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue()); //工位1目标站点 |
| | | rgvCommand.setCommand((short) 1); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand)); |
| | | } else { |
| | | // 修改工作档状态 2.设备上走1 => 3.RGV取货中 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(3L); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 2.设备上走1 => 3.RGV取货中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | } else if (wrkMast.getWrkSts() == 14) {//4.RGV取货完成 => 5.RGV放货中 14出库完成 |
| | | if (rgvProtocol.getTaskNo1() == 0 || !rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue())) {//RGV必须有任务且任务和当前工作档一致 |
| | | continue; |
| | | } |
| | | if (rgvProtocol.getLoaded1() == 0) {//RGV必须有物 |
| | | continue; |
| | | } |
| | | |
| | | //判断行走路径是否被占用 |
| | | Integer staNo = wrkMast.getStaNo(); |
| | | BasDevp basDevp = basDevpService.selectById(staNo); |
| | | if (basDevp == null) { |
| | | continue;//目标站不存在 |
| | | } |
| | | //起始路径 |
| | | int startPath = rgvProtocol.getRgvPos().intValue(); |
| | | //目标路径值 |
| | | int endPath = basDevp.getLocType3().intValue(); |
| | | boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用 |
| | | if (pathUsed) { |
| | | //行走路径被占用,禁止下发命令 |
| | | continue; |
| | | } |
| | | //行走路径空闲,锁定路径 |
| | | RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true); |
| | | |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV编号 |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 工位1任务模式: 放货 |
| | | rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue()); //工位1目标站点 |
| | | rgvCommand.setCommand((short) 1); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand)); |
| | | } else { |
| | | // 修改工作档状态 4.RGV取货完成 => 5.RGV放货中 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(5L); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 4.RGV取货完成 => 5.RGV放货中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | } else if (wrkMast.getWrkSts() == 23) {//23.设备上走1 => 24.RGV取货中 |
| | | if (rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getLoaded1() != 0) {//RGV是否无任务、RGV是否无货 |
| | | continue; |
| | | } |
| | | |
| | | //判断行走路径是否被占用 |
| | | Integer staNo = wrkMast.getSourceStaNo(); |
| | | BasDevp basDevp = basDevpService.selectById(staNo); |
| | | if (basDevp == null) { |
| | | continue;//目标站不存在 |
| | | } |
| | | //起始路径 |
| | | int startPath = rgvProtocol.getRgvPos().intValue(); |
| | | //目标路径值 |
| | | int endPath = basDevp.getLocType3().intValue(); |
| | | boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用 |
| | | if (pathUsed) { |
| | | //行走路径被占用,禁止下发命令 |
| | | continue; |
| | | } |
| | | //行走路径空闲,锁定路径 |
| | | RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true); |
| | | |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV编号 |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 工位1任务模式: 取货 |
| | | rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue()); //工位1目标站点 |
| | | rgvCommand.setCommand((short) 1); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand)); |
| | | } else { |
| | | // 修改工作档状态 23.设备上走1 => 24.RGV取货中 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(24L); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 23.设备上走1 => 24.RGV取货中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | } else if (wrkMast.getWrkSts() == 25) {//25.RGV取货完成 => 26.RGV放货中 |
| | | if (rgvProtocol.getTaskNo1() == 0 || !rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue())) {//RGV必须有任务且任务和当前工作档一致 |
| | | continue; |
| | | } |
| | | if (rgvProtocol.getLoaded1() == 0) {//RGV必须有物 |
| | | continue; |
| | | } |
| | | |
| | | //判断行走路径是否被占用 |
| | | Integer staNo = wrkMast.getStaNo(); |
| | | BasDevp basDevp = basDevpService.selectById(staNo); |
| | | if (basDevp == null) { |
| | | continue;//目标站不存在 |
| | | } |
| | | //起始路径 |
| | | int startPath = rgvProtocol.getRgvPos().intValue(); |
| | | //目标路径值 |
| | | int endPath = basDevp.getLocType3().intValue(); |
| | | boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用 |
| | | if (pathUsed) { |
| | | //行走路径被占用,禁止下发命令 |
| | | continue; |
| | | } |
| | | //行走路径空闲,锁定路径 |
| | | RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true); |
| | | |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV编号 |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 工位1任务模式: 放货 |
| | | rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue()); //工位1目标站点 |
| | | rgvCommand.setCommand((short) 1); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand)); |
| | | } else { |
| | | // 修改工作档状态 25.RGV取货完成 => 26.RGV放货中 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(26L); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 25.RGV取货完成 => 26.RGV放货中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | private boolean rgvIoExecuteWrk2To3() { |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | /** |
| | | * 入库 ===>> RGV入库站到站 |
| | | */ |
| | | public synchronized void rgvInStn(RgvSlave slave, RgvProtocol rgvProtocol) { |
| | | WrkMast wrkMast = wrkMastMapper.selectRgvInSteNo(slave.getId()); |
| | | |
| | | |
| | | //查找工作状态为2(设备上走),且RGV入库接驳站符合的的入库工作档,提取出最多2笔 |
| | | List<WrkMast> wrkMastTask = getRgvInTask(slave); |
| | | if(wrkMastTask.size() <= 0){ |
| | | return; |
| | | } |
| | | |
| | | // RGV控制过滤, 必须满足自动、空闲,没有任务号 |
| | | if (!rgvProtocol.getStatusType().equals(CrnStatusType.IDLE) |
| | | || rgvProtocol.getModeType() != RgvModeType.AUTO |
| | | || rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getTaskNo2() != 0) { |
| | | return; |
| | | } |
| | | |
| | | // 已经存在RGV执行任务时,则过滤 |
| | | if(wrkMastMapper.selectRgvInWorking(slave.getId()).size() > 0){ |
| | | return; |
| | | } |
| | | |
| | | if(wrkMastTask.size() == 2){ |
| | | //有2笔RGV待入库任务,2个工位,取货、放货任务同时下发 |
| | | WrkMast wrkMast1 = wrkMastTask.get(0); |
| | | WrkMast wrkMast2 = wrkMastTask.get(1); |
| | | if(Cools.isEmpty(wrkMast1) || Cools.isEmpty(wrkMast2)){ |
| | | log.error("工作档RGV入库数据为空"); |
| | | return; |
| | | } |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(slave.getId()); // RGV编号 |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 工位1任务模式: 取放货 |
| | | rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //工位1源站点 |
| | | rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //工位1目标站点 |
| | | rgvCommand.setAckFinish2((short) 0); // 工位2任务完成确认位 |
| | | rgvCommand.setTaskNo2(wrkMast2.getWrkNo().shortValue()); // 工位2工作号 |
| | | rgvCommand.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 工位2任务模式: 取放货 |
| | | rgvCommand.setSourceStaNo2(wrkMast2.getRgvSstaNo().shortValue()); //工位2源站点 |
| | | rgvCommand.setDestinationStaNo2(wrkMast2.getRgvDstaNo().shortValue()); //工位2目标站点 |
| | | rgvCommand.setCommand((short) 0); //工位1、2任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(2, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", slave.getId(), JSON.toJSON(rgvCommand)); |
| | | } else { |
| | | // 修改工作档状态 2.设备上走 => 6.RGV入库取货中 |
| | | Date now = new Date(); |
| | | wrkMast1.setWrkSts(6L); |
| | | wrkMast1.setCrnStrTime(now); |
| | | wrkMast1.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast1) == 0) { |
| | | log.error("修改工作档状态 2.设备上走 => 6.RGV入库取货中 失败!!,工作号={}", wrkMast1.getWrkNo()); |
| | | } |
| | | |
| | | wrkMast2.setWrkSts(6L); |
| | | wrkMast2.setCrnStrTime(now); |
| | | wrkMast2.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast2) == 0) { |
| | | log.error("修改工作档状态 2.设备上走 => 6.RGV入库取货中 失败!!,工作号={}", wrkMast2.getWrkNo()); |
| | | } |
| | | } |
| | | } else if(wrkMastTask.size() == 1){ |
| | | //只有1笔RGV待入库任务,先下发取货任务,取货后再判断是否有下一笔待入库任务 |
| | | WrkMast wrkMast1 = wrkMastTask.get(0); |
| | | if(Cools.isEmpty(wrkMast1)){ |
| | | log.error("工作档RGV入库数据为空"); |
| | | return; |
| | | } |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(slave.getId()); // RGV编号 |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 工位1任务模式: 取货 |
| | | rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //工位1源站点 |
| | | rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //工位1目标站点 |
| | | rgvCommand.setCommand((short) 0); //工位1、2任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2任务确认; step=4,工位1确认; step=5,工位2任务确认 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", slave.getId(), JSON.toJSON(rgvCommand)); |
| | | } else { |
| | | // 修改工作档状态 2.设备上走 => 6.RGV入库取货中 |
| | | Date now = new Date(); |
| | | wrkMast1.setWrkSts(6L); |
| | | wrkMast1.setCrnStrTime(now); |
| | | wrkMast1.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast1) == 0) { |
| | | log.error("修改工作档状态 2.设备上走 => 6.RGV入库取货中 失败!!,工作号={}", wrkMast1.getWrkNo()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 出库 ===>> RGV出库站到站 |
| | | */ |
| | | public synchronized void rgvOutStn(RgvSlave slave, RgvProtocol rgvProtocol) { |
| | | //查找工作状态为14(出库完成),且RGV出库接驳站符合的的出库工作档,提取出最多2笔 |
| | | List<WrkMast> wrkMastTask = getRgvOutTask(slave); |
| | | if(wrkMastTask.size() <= 0){ |
| | | return; |
| | | } |
| | | |
| | | // RGV控制过滤, 必须满足自动、空闲,没有任务号 |
| | | if (!rgvProtocol.getStatusType().equals(CrnStatusType.IDLE) |
| | | || rgvProtocol.getModeType() != RgvModeType.AUTO |
| | | || rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getTaskNo2() != 0) { |
| | | return; |
| | | } |
| | | |
| | | // 已经存在RGV执行任务时,则过滤 |
| | | if(wrkMastMapper.selectRgvOutWorking(slave.getId()).size() > 0){ |
| | | return; |
| | | } |
| | | |
| | | if(wrkMastTask.size() == 2){ |
| | | //有2笔RGV待入库任务,2个工位,取货、放货任务同时下发 |
| | | WrkMast wrkMast1 = wrkMastTask.get(0); |
| | | WrkMast wrkMast2 = wrkMastTask.get(1); |
| | | if(Cools.isEmpty(wrkMast1) || Cools.isEmpty(wrkMast2)){ |
| | | log.error("工作档RGV入库数据为空"); |
| | | return; |
| | | } |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(slave.getId()); // RGV编号 |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 工位1任务模式: 取放货 |
| | | rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //工位1源站点 |
| | | rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //工位1目标站点 |
| | | rgvCommand.setAckFinish2((short) 0); // 工位2任务完成确认位 |
| | | rgvCommand.setTaskNo2(wrkMast2.getWrkNo().shortValue()); // 工位2工作号 |
| | | rgvCommand.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 工位2任务模式: 取放货 |
| | | rgvCommand.setSourceStaNo2(wrkMast2.getRgvSstaNo().shortValue()); //工位2源站点 |
| | | rgvCommand.setDestinationStaNo2(wrkMast2.getRgvDstaNo().shortValue()); //工位2目标站点 |
| | | rgvCommand.setCommand((short) 0); //工位1、2任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(2, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", slave.getId(), JSON.toJSON(rgvCommand)); |
| | | } else { |
| | | // 修改工作档状态 14.出库完成 => 16.RGV出库取货中 |
| | | Date now = new Date(); |
| | | wrkMast1.setWrkSts(16L); |
| | | wrkMast1.setCrnStrTime(now); |
| | | wrkMast1.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast1) == 0) { |
| | | log.error("修改工作档状态 14.出库完成 => 16.RGV出库取货中 失败!!,工作号={}", wrkMast1.getWrkNo()); |
| | | } |
| | | |
| | | wrkMast2.setWrkSts(16L); |
| | | wrkMast2.setCrnStrTime(now); |
| | | wrkMast2.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast2) == 0) { |
| | | log.error("修改工作档状态 14.出库完成 => 16.RGV出库取货中 失败!!,工作号={}", wrkMast2.getWrkNo()); |
| | | } |
| | | } |
| | | } else if(wrkMastTask.size() == 1){ |
| | | //只有1笔RGV待入库任务,先下发取货任务,取货后再判断是否有下一笔待入库任务 |
| | | WrkMast wrkMast1 = wrkMastTask.get(0); |
| | | if(Cools.isEmpty(wrkMast1)){ |
| | | log.error("工作档RGV入库数据为空"); |
| | | return; |
| | | } |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(slave.getId()); // RGV编号 |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 工位1任务模式: 取货 |
| | | rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //工位1源站点 |
| | | rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //工位1目标站点 |
| | | rgvCommand.setCommand((short) 0); //工位1、2任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2任务确认; step=4,工位1确认; step=5,工位2任务确认 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", slave.getId(), JSON.toJSON(rgvCommand)); |
| | | } else { |
| | | // 修改工作档状态 14.出库完成 => 16.RGV出库取货中 |
| | | Date now = new Date(); |
| | | wrkMast1.setWrkSts(16L); |
| | | wrkMast1.setCrnStrTime(now); |
| | | wrkMast1.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast1) == 0) { |
| | | log.error("修改工作档状态 14.出库完成 => 16.RGV出库取货中 失败!!,工作号={}", wrkMast1.getWrkNo()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 查找工作状态为14(出库完成),且RGV出库接驳站符合的的出库工作档,提取出最多2笔 |
| | | * @param slave |
| | | * @return |
| | |
| | | } |
| | | } |
| | | return wrkMastTask; |
| | | } |
| | | |
| | | /** |
| | | * 根据RGV完成信号,执行对工作档的完成操作,和RGV的任务下发 |
| | | */ |
| | | public synchronized void rgvFinished() { |
| | | Date now = new Date(); |
| | | for (RgvSlave rgv : slaveProperties.getRgv()) { |
| | | // 获取RGV信息 |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | continue; |
| | | } |
| | | //判断RGV是否空闲,工位1是否空闲,工位1是否有物,是否为电脑模式,工位1是否有工作号 |
| | | if (rgvProtocol.statusType1 == RgvStatusType.FETCHWAITING |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getTaskNo1() != 0 |
| | | && rgvProtocol.getStatus() != 0 |
| | | && rgvProtocol.getStatus1() != 0 |
| | | ) { |
| | | WrkMast wrkMast1 = wrkMastMapper.selectPakInStep3(rgvProtocol.getTaskNo1().intValue()); |
| | | if (wrkMast1 == null) { |
| | | log.error("RGV工位1处于等待确认且取货任务完成状态,但未找到工作档。RGV号={},工作号={}", rgv.getId(), rgvProtocol.getTaskNo1()); |
| | | continue; |
| | | } |
| | | |
| | | if (wrkMast1.getWrkSts() == 3) {//3.RGV取货中 => 4.RGV取货完成 |
| | | wrkMast1.setWrkSts(4L); |
| | | }else if(wrkMast1.getWrkSts() == 5){//5.RGV放货中 => 6.RGV放货完成 |
| | | rgvProtocol.setTaskNo1((short) 0);//入库任务完成,清空任务号 |
| | | wrkMast1.setWrkSts(6L); |
| | | } else if (wrkMast1.getWrkSts() == 24) {//24.RGV取货中 => 25.RGV取货完成 |
| | | wrkMast1.setWrkSts(25L);// |
| | | } else if (wrkMast1.getWrkSts() == 26) {//26.RGV放货中 => 27.RGV放货完成 |
| | | rgvProtocol.setTaskNo1((short) 0);//出库任务完成,清空任务号 |
| | | wrkMast1.setWrkSts(27L);//27.RGV放货完成 |
| | | } |
| | | |
| | | //解锁路径 |
| | | RgvUtils.unLockPath(wrkMast1.getRgvNo()); |
| | | |
| | | wrkMast1.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast1) == 0) { |
| | | log.error("工位1修改工作档状态失败!!,工作号={}", wrkMast1.getWrkNo()); |
| | | } |
| | | |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(rgv.getId()); // RGV编号 |
| | | rgvCommand.setAckFinish1((short) 1); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.NONE); // 工位1任务模式: 无 |
| | | rgvCommand.setCommand((short) 1); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2任务确认; step=4,工位1确认; step=5,工位2任务确认 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgv.getId(), JSON.toJSON(rgvCommand)); |
| | | } |
| | | |
| | | // //工位1取货完成后,工位2是无货空闲状态时,准备给工位2发任务,确认是否有待执行RGV任务 |
| | | // if (rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | // && rgvProtocol.getTaskNo1() > 0 && rgvProtocol.getTaskNo2() == 0 |
| | | // && rgvProtocol.getLoaded1() > 0 && rgvProtocol.getLoaded2() == 0 |
| | | // && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | // ) { |
| | | // WrkMast wrkMast1 = wrkMastMapper.selectPakInStep3(rgvProtocol.getTaskNo1().intValue()); |
| | | // if (wrkMast1 == null) { |
| | | // log.error("RGV工位1处于等待确认且取货任务完成状态,但未找到工作档。RGV号={},工作号={}", rgv.getId(), rgvProtocol.getTaskNo1()); |
| | | // continue; |
| | | // } |
| | | // List<WrkMast> wrkMastTask = new ArrayList<>(); |
| | | // List<WrkMast> list = new ArrayList<>(); |
| | | // Integer type = 0;//1入库,2出库 |
| | | // if(wrkMast1.getWrkSts()==6L){ |
| | | // wrkMastTask = getRgvInTask(rgv); |
| | | // list = wrkMastMapper.selectRgvInWorking(rgv.getId()); |
| | | // type = 1; |
| | | // } else if(wrkMast1.getWrkSts()==16L){ |
| | | // wrkMastTask = getRgvOutTask(rgv); |
| | | // list = wrkMastMapper.selectRgvOutWorking(rgv.getId()); |
| | | // type = 2; |
| | | // } |
| | | // if(wrkMastTask.size() > 0){//有继续执行任务,下发取货任务给工位2 |
| | | // // 已经存在RGV执行任务时,则过滤 |
| | | // if (list.size() > 1) { |
| | | // continue; |
| | | // } |
| | | // WrkMast wrkMast2 = wrkMastTask.get(0); |
| | | // // 命令下发区 -------------------------------------------------------------------------- |
| | | // RgvCommand rgvCommand = new RgvCommand(); |
| | | // rgvCommand.setRgvNo(rgv.getId()); // RGV编号 |
| | | // rgvCommand.setAckFinish2((short) 0); // 工位2任务完成确认位 |
| | | // rgvCommand.setTaskNo2(wrkMast2.getWrkNo().shortValue()); // 工位2工作号 |
| | | // rgvCommand.setTaskMode2(RgvTaskModeType.FETCH); // 工位2任务模式: 取货 |
| | | // rgvCommand.setSourceStaNo2(wrkMast2.getRgvSstaNo().shortValue()); //工位2源站点 |
| | | // rgvCommand.setDestinationStaNo2(wrkMast2.getRgvDstaNo().shortValue()); //工位2目标站点 |
| | | // rgvCommand.setCommand((short) 0); //工位1、2任务确认 |
| | | // if (!MessageQueue.offer(SlaveType.Crn, wrkMast2.getRgvNo(), new Task(5, rgvCommand))) { |
| | | // //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | // log.error("RGV命令下发失败,RGV号={},任务数据={}", rgv.getId(), JSON.toJSON(rgvCommand)); |
| | | // } else { |
| | | // // 修改工作档状态 2.设备上走 => 6.RGV入库取货中 |
| | | // Date now = new Date(); |
| | | // wrkMast2.setWrkSts(type==1 ? 6L : 16L); |
| | | // wrkMast2.setCrnStrTime(now); |
| | | // wrkMast2.setModiTime(now); |
| | | // if (wrkMastMapper.updateById(wrkMast2) == 0) { |
| | | // log.error("工位2修改工作档状态 2/14.设备上走 => 6/16.RGV入库取货中 失败!!,工作号={}", wrkMast2.getWrkNo()); |
| | | // } |
| | | // } |
| | | // } else {//没有继续执行任务,下发放货任务给工位1 |
| | | // if(type == 1 && wrkMast1.getWrkSts() != 6L){//RGV入库取货中 |
| | | // continue; |
| | | // } |
| | | // if(type == 2 && wrkMast1.getWrkSts() != 16L){//RGV出库取货中 |
| | | // continue; |
| | | // } |
| | | // |
| | | // // 命令下发区 -------------------------------------------------------------------------- |
| | | // RgvCommand rgvCommand = new RgvCommand(); |
| | | // rgvCommand.setRgvNo(rgv.getId()); // RGV编号 |
| | | // rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | // rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 工位1工作号 |
| | | // rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 工位1任务模式: 放货 |
| | | // rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //工位1源站点 |
| | | // rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //工位1目标站点 |
| | | // rgvCommand.setCommand((short) 0); //工位1、2任务确认 |
| | | // if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(4, rgvCommand))) { |
| | | // //step=2,工位1、2任务确认; step=4,工位1确认; step=5,工位2任务确认 |
| | | // log.error("RGV命令下发失败,RGV号={},任务数据={}", rgv.getId(), JSON.toJSON(rgvCommand)); |
| | | // } else { |
| | | // // 修改工作档状态 6.RGV入库取货中 => 7.RGV入库放货中 |
| | | // Date now = new Date(); |
| | | // wrkMast1.setWrkSts(type==1 ? 7L : 17L); |
| | | // wrkMast1.setCrnEndTime(now); |
| | | // wrkMast1.setModiTime(now); |
| | | // if (wrkMastMapper.updateById(wrkMast1) == 0) { |
| | | // log.error("修改工作档状态 6/16.RGV入库取货中 => 7/17.RGV入库放货中 失败!!,工作号={}", wrkMast1.getWrkNo()); |
| | | // } |
| | | // log.error("RGV命令下发成功,RGV号={},任务数据={}", rgv.getId(), JSON.toJSON(rgvCommand)); |
| | | // } |
| | | // } |
| | | // } else if (rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | // && rgvProtocol.getTaskNo1() > 0 && rgvProtocol.getTaskNo2() > 0 |
| | | // && rgvProtocol.getLoaded1() > 0 && rgvProtocol.getLoaded2() > 0 |
| | | // && rgvProtocol.statusType2 == RgvStatusType.FETCHWAITING){ |
| | | // // 工位2状态:也是取货完成等待确认91 并且 任务完成位 = 1, 工位1、2同时下发放货任务 |
| | | // WrkMast wrkMast1 = wrkMastMapper.selectPakInStep3(rgvProtocol.getTaskNo1().intValue()); |
| | | // WrkMast wrkMast2 = wrkMastMapper.selectPakInStep3(rgvProtocol.getTaskNo2().intValue()); |
| | | // // 命令下发区 -------------------------------------------------------------------------- |
| | | // RgvCommand rgvCommand = new RgvCommand(); |
| | | // rgvCommand.setRgvNo(rgv.getId()); // RGV编号 |
| | | // rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | // rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 工位1工作号 |
| | | // rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 工位1任务模式: 放货 |
| | | // rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //工位1源站点 |
| | | // rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //工位1目标站点 |
| | | // rgvCommand.setAckFinish2((short) 0); // 工位2任务完成确认位 |
| | | // rgvCommand.setTaskNo2(wrkMast2.getWrkNo().shortValue()); // 工位2工作号 |
| | | // rgvCommand.setTaskMode2(RgvTaskModeType.PUT); // 工位2任务模式: 放货 |
| | | // rgvCommand.setSourceStaNo2(wrkMast2.getRgvSstaNo().shortValue()); //工位2源站点 |
| | | // rgvCommand.setDestinationStaNo2(wrkMast2.getRgvDstaNo().shortValue()); //工位2目标站点 |
| | | // rgvCommand.setCommand((short) 0); //工位1、2任务确认 |
| | | // if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(2, rgvCommand))) { |
| | | // //step=2,工位1、2任务确认; step=4,工位1确认; step=5,工位2任务确认 |
| | | // log.error("RGV命令下发失败,RGV号={},任务数据={}", rgv.getId(), JSON.toJSON(rgvCommand)); |
| | | // } else { |
| | | // // 修改工作档状态 2.设备上走 => 6.RGV入库取货中 |
| | | // Date now = new Date(); |
| | | // wrkMast1.setWrkSts(wrkMast1.getWrkSts()==6L ? 7L : 17L); |
| | | // wrkMast1.setCrnStrTime(now); |
| | | // wrkMast1.setModiTime(now); |
| | | // if (wrkMastMapper.updateById(wrkMast1) == 0) { |
| | | // log.error("修改工作档状态 6/16.RGV入库取货中 => 7/17.RGV入库放货中 失败!!,工作号={}", wrkMast1.getWrkNo()); |
| | | // } |
| | | // |
| | | // wrkMast2.setWrkSts(wrkMast2.getWrkSts()==6L ? 7L : 17L); |
| | | // wrkMast2.setCrnStrTime(now); |
| | | // wrkMast2.setModiTime(now); |
| | | // if (wrkMastMapper.updateById(wrkMast2) == 0) { |
| | | // log.error("修改工作档状态 6/16.RGV入库取货中 => 7/17.RGV入库放货中 失败!!,工作号={}", wrkMast2.getWrkNo()); |
| | | // } |
| | | // } |
| | | // } |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 入出库 ===>> RGV出库站到堆垛机入库站/系统入库站 |
| | | * rgvInDStnToCrnStn |
| | | */ |
| | | public synchronized void rgvDestStnToCrnStn() { |
| | | for (RgvSlave rgvSlave : slaveProperties.getRgv()) { |
| | | // 遍历入库任务的RGV出库站 |
| | | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvDestStn()) { |
| | | // 获取RGV出库站信息 |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(rgvStn.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) { |
| | | // 查询工作档List |
| | | // List<WrkMast> wrkMasts = wrkMastMapper.selectRgvInStep2(staProtocol.getSiteId()); |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectRgvDestStep2(staProtocol.getSiteId()); |
| | | for(WrkMast wrkMast : wrkMasts){ |
| | | // 判断工作档条件 |
| | | if (wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null |
| | | || wrkMast.getRgvSstaNo() == null || wrkMast.getRgvDstaNo() == null) { |
| | | continue; |
| | | } |
| | | |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, wrkMast.getRgvNo()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | // 判断RGV状态等待确认,工位1 |
| | | if (rgvProtocol.modeType == RgvModeType.AUTO && rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue()) |
| | | && rgvProtocol.statusType1 == RgvStatusType.WAITING) { |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | // 下发站点信息 |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo()); |
| | | if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) { |
| | | continue; |
| | | } |
| | | // 更新工作档状态为2,14 |
| | | wrkMast.setWrkSts(wrkMast.getWrkSts()==7L ? 2L : 14L); |
| | | wrkMast.setOnlineYn("Y"); |
| | | wrkMast.setCrnEndTime(new Date()); |
| | | if (wrkMastMapper.updateById(wrkMast) != 0) { |
| | | // 复位RGV工位1 |
| | | rgvThread.setResetFlag1(true); |
| | | } else { |
| | | log.error("RGV工位1接驳,更新工作档的工作状态为{}失败!!! [工作号:{}]", wrkMast.getWrkSts()==7L ? 2L : 14L, wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | // 判断RGV状态等待确认,工位2 |
| | | if (rgvProtocol.modeType == RgvModeType.AUTO && rgvProtocol.getTaskNo2().equals(wrkMast.getWrkNo().shortValue()) |
| | | && rgvProtocol.statusType2 == RgvStatusType.WAITING) { |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | // 下发站点信息 |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo()); |
| | | if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) { |
| | | continue; |
| | | } |
| | | // 更新工作档状态为2,14 |
| | | wrkMast.setWrkSts(wrkMast.getWrkSts()==7L ? 2L : 14L); |
| | | wrkMast.setOnlineYn("Y"); |
| | | wrkMast.setCrnEndTime(new Date()); |
| | | if (wrkMastMapper.updateById(wrkMast) != 0) { |
| | | // 复位RGV工位2 |
| | | rgvThread.setResetFlag2(true); |
| | | } else { |
| | | log.error("RGV工位2接驳,更新工作档的工作状态为{}失败!!! [工作号:{}]", wrkMast.getWrkSts()==7L ? 2L : 14L, wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 出库 ===>> RGV出库站到系统出库站 |
| | | */ |
| | | public synchronized void rgvOutDStnToOutStn() { |
| | | for (RgvSlave rgvSlave : slaveProperties.getRgv()) { |
| | | // 遍历出库任务的RGV出库站 |
| | | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvDestStn()) { |
| | | // 获取RGV出库站信息 |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(rgvStn.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) { |
| | | // 查询工作档List |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectRgvOutStep2(staProtocol.getSiteId()); |
| | | for(WrkMast wrkMast : wrkMasts){ |
| | | // 判断工作档条件 |
| | | if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null |
| | | || wrkMast.getRgvSstaNo() == null || wrkMast.getRgvDstaNo() == null) { |
| | | continue; |
| | | } |
| | | |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, wrkMast.getRgvNo()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | // 判断RGV状态等待确认,工位1 |
| | | if (rgvProtocol.modeType == RgvModeType.AUTO && rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue()) |
| | | && rgvProtocol.statusType1 == RgvStatusType.WAITING) { |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | // 下发站点信息 |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo()); |
| | | if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) { |
| | | continue; |
| | | } |
| | | // 更新工作档状态为14 |
| | | wrkMast.setWrkSts(14L); |
| | | wrkMast.setOnlineYn("Y"); //控制WMS将工作状态14转15的时机,只有RGV运搬完成后才可以转 |
| | | wrkMast.setCrnEndTime(new Date()); |
| | | if (wrkMastMapper.updateById(wrkMast) != 0) { |
| | | // 复位RGV工位1 |
| | | rgvThread.setResetFlag1(true); |
| | | } else { |
| | | log.error("RGV工位1接驳,更新工作档的工作状态为2失败!!! [工作号:{}]", wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | // 判断RGV状态等待确认,工位2 |
| | | if (rgvProtocol.modeType == RgvModeType.AUTO && rgvProtocol.getTaskNo2().equals(wrkMast.getWrkNo().shortValue()) |
| | | && rgvProtocol.statusType2 == RgvStatusType.WAITING) { |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | // 下发站点信息 |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo()); |
| | | if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) { |
| | | continue; |
| | | } |
| | | // 更新工作档状态为14 |
| | | wrkMast.setWrkSts(14L); |
| | | wrkMast.setOnlineYn("Y"); //控制WMS将工作状态14转15的时机,只有RGV运搬完成后才可以转 |
| | | wrkMast.setCrnEndTime(new Date()); |
| | | if (wrkMastMapper.updateById(wrkMast) != 0) { |
| | | // 复位RGV工位2 |
| | | rgvThread.setResetFlag2(true); |
| | | } else { |
| | | log.error("RGV工位2接驳,更新工作档的工作状态为2失败!!! [工作号:{}]", wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | // 只有当RGV空闲、自动,工位二有物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && (rgvProtocol.getLoaded2()==2 || rgvProtocol.getLoaded2()==3 ) ////0 无物;1 一层无物二层有物 ;2一层有物二层无物 (只能满放);3 1、2层都有物 |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 |
| | | && (rgvProtocol.getLoaded2()==2 || rgvProtocol.getLoaded2()==3 ) ////0 无物;1 一层无物二层有物 ;2一层有物二层无物 (只能满放);3 1、2层都有物 4:()只允许拆盘 |
| | | ) { |
| | | try { |
| | | WrkMast wrkMast1 = wrkMastMapper.selectPakOutStep3(122); |
| | | if (!Cools.isEmpty(wrkMast1)){ |
| | | continue; |
| | | } |
| | | // 获取空板入库站信息 |
| | | |
| | | SearchLocParam param = new SearchLocParam(); |
| | |
| | | if (!Cools.isEmpty(wrkMast) && wrkMast.getIoType()==10 && wrkMast.getWrkSts()==2){ |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(wrkMast.getWrkNo().longValue()); |
| | | if (Cools.isEmpty(wrkMastSta)){ |
| | | WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(),0); |
| | | WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(),wrkMast.getStaNo()); |
| | | wrkMastSta1.setWrkNo(wrkMast.getWrkNo().longValue()); |
| | | wrkMastSta1.setType(2); |
| | | wrkMastSta1.setWrkType(6);//工作类型 1:取(叠盘) 2:拆盘 3:取放 5:满取 6:满放 |
| | |
| | | // ledCommand.setSourceStaNo(wrkMast.getSourceStaNo()); |
| | | if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) { |
| | | List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo()); |
| | | wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme()))); |
| | | wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl))); |
| | | } |
| | | commands.add(ledCommand); |
| | | } |
| | | Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet()); |
| | | // 获取LED线程 |
| | | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); |
| | | // // 相同工作号集合则过滤 |
| | | // if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) { |
| | | // continue; |
| | | // } |
| | | // 相同工作号集合则过滤 |
| | | if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) { |
| | | continue; |
| | | } |
| | | // 命令下发 ------------------------------------------------------------------------------- |
| | | if (!commands.isEmpty()) { |
| | | // if (led.getId() == 7) { |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 初始化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)); |
| | | } |
| | | } |
| | | } |
| | | // /** |
| | | // * 初始化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)); |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | /** |
| | | * 堆垛机演示 ===>> 库位移转 |
| | |
| | | |
| | | } |
| | | |
| | | public synchronized void outOfDevp() { |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectPick(); |
| | | for (WrkMast wrkMast : wrkMasts) { |
| | | if (basDevpService.selectCount(new EntityWrapper<BasDevp>().eq("wrk_no", wrkMast.getWrkNo())) == 0) { |
| | | wrkMast.setCtnNo("Y"); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改{}工作档失败,ctn_no", wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | public synchronized void autoEmptyOut() { |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | Integer autoOutSite = 12; |
| | | //如果站点可出禁用,则不生成空盘出库任务 |
| | | StaProtocol staProtocol = devpThread.getStation().get(autoOutSite); |
| | | if (staProtocol == null) { |
| | | return; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol.isAutoing() //自动 |
| | | && !staProtocol.isLoading() //无物 |
| | | && staProtocol.isOutEnable() //可出信号 |
| | | && staProtocol.getWorkNo() == 0 |
| | | ) { |
| | | WrkMast pakoutEmpty = wrkMastMapper.selectPakoutEmpty(autoOutSite); |
| | | if (null != pakoutEmpty) { |
| | | return; |
| | | } |
| | | try { |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/rpc/auto/emptyOut/v1") |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | JSONObject data = (JSONObject) jsonObject.get("data"); |
| | | log.info((String) data.get("msg")); |
| | | } else { |
| | | log.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/auto/emptyOut/v1","", response); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public synchronized void autoEmptyIn() { |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | Integer autoInSite = 12; |
| | | StaProtocol staProtocol = devpThread.getStation().get(autoInSite); |
| | | if (staProtocol == null) { |
| | | return; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol.isAutoing() //自动 |
| | | && staProtocol.isLoading() //有物 |
| | | && staProtocol.isInEnable() //可入信号 |
| | | && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990) //工作号为0或者工作号是9991~9999(输送机留用) |
| | | ) { |
| | | |
| | | try { |
| | | LocTypeDto locTypeDto = new LocTypeDto((short) 1, (short) 1, (short) 1); |
| | | |
| | | |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/rpc/auto/emptyIn/v1") |
| | | .setJson(JSON.toJSONString(locTypeDto)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | log.info((String) jsonObject.get("msg")); |
| | | } else { |
| | | log.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/auto/emptyIn/v1", JSON.toJSONString(locTypeDto), response); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // /** |
| | | // * 其他 ===>> 码垛位自动补充空板:驱动拆盘机输出托盘 |
| | | // */ |
| | |
| | | int[] staNos=new int[]{131,135};//(2个入库站点,1楼2个出库码垛站,根据现场修改) |
| | | for (int staNo : staNos){ |
| | | BasDevp basDevp = basDevpService.selectById(staNo); |
| | | if (basDevp.getWrkNo()!=0){ |
| | | if (Cools.isEmpty(basDevp) || basDevp.getReportSign()!=1){ |
| | | continue; |
| | | } |
| | | if (basDevp.getWrkNo()!=0 && (basDevp.getWrkNo()<9900 || basDevp.getWrkNo()>9999)){ |
| | | continue; |
| | | } |
| | | WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne202(staNo); |
| | |
| | | int[] staNos=new int[]{144};//(1楼1个贴标位,根据现场修改) |
| | | for (int staNo : staNos){ |
| | | BasDevp basDevp = basDevpService.selectById(staNo); |
| | | if ((basDevp.getWrkNo()<9900 || basDevp.getWrkNo()>19999) && basDevp.getWrkNo()!=32222){ |
| | | if ((basDevp.getWrkNo()<9900 || basDevp.getWrkNo()>9999) && basDevp.getWrkNo()!=32222){ |
| | | continue; |
| | | } |
| | | WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne202(staNo); |
| | |
| | | } |
| | | 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(); |
| | | } |
| | | |
| | | if (!staProtocol.isLoading()){ |
| | | log.info("{}站点无物,异常!",staNo); |
| | | continue; |
| | | } |
| | | // 判断是否满足入库条件 |
| | | if (staProtocol.isAutoing() |
| | | && staProtocol.isLoading() |
| | | && !staProtocol.isEmptyMk() |
| | | ) { |
| | | 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); |
| | | } |
| | | } |
| | | }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); |
| | | staProtocol135.setWorkNo(32222); |
| | | 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)); |
| | | |
| | | } |
| | | } |
| | |
| | | StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); |
| | | if (!Cools.isEmpty(wrkMast)){ |
| | | Thread.sleep(200); |
| | | // 下发站点信息 |
| | | 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){ |
| | | // |
| | | // } |
| | | } |
| | | wrkMastSta.setWrkSts(3); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | |
| | | StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); |
| | | if (!Cools.isEmpty(wrkMast)){ |
| | | Thread.sleep(200); |
| | | // 下发站点信息 |
| | | 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){ |
| | | |
| | | } |
| | | } |
| | | wrkMastSta.setWrkSts(3); |
| | |
| | | } |
| | | } |
| | | /** |
| | | * 入出库 ===>> 小车作业下发 |
| | | */ |
| | | public synchronized void rgvIoExecute(Integer sign) { |
| | | 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(); |
| | | break; |
| | | //执行小车空板搬运任务 |
| | | case 2://放//拆盘 |
| | | signWork = rgvRunWrkMastEmptyStaPut(); |
| | | break; |
| | | case 3://满放 |
| | | signWork = rgvRunWrkMastEmptyStaPutFull(); |
| | | break; |
| | | case 4://取叠盘 |
| | | signWork = rgvRunWrkMastEmptyStaTake(); |
| | | break; |
| | | case 5:////满取 |
| | | signWork = rgvRunWrkMastEmptyStaTakeFull(); |
| | | break; |
| | | case 6:////提升 |
| | | // signWork = qwe(); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | for (int signCount = 1;!signWork && signCount<8;signCount++){ |
| | | switch (signCount){ |
| | | case 1://执行小车货物搬运任务 |
| | | signWork = rgvRunWrkMastFullSta(); |
| | | break; |
| | | case 2://放//拆盘 |
| | | signWork = rgvRunWrkMastEmptyStaPut(); |
| | | break; |
| | | case 3://满放 |
| | | signWork = rgvRunWrkMastEmptyStaPutFull(); |
| | | break; |
| | | case 4://取叠盘 |
| | | signWork = rgvRunWrkMastEmptyStaTake(); |
| | | break; |
| | | case 5:////满取 |
| | | signWork = rgvRunWrkMastEmptyStaTakeFull(); |
| | | break; |
| | | case 6:////提升 |
| | | // signWork = rgvRunWrkMastEmptyStaPut(); |
| | | break; |
| | | default: |
| | | if (sign>6){ |
| | | rgvRunWrkMastEmptyStaAvoidance();//避让 |
| | | signWork = true; |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("RGV小车任务下发报错"+e); |
| | | } |
| | | } |
| | | /** |
| | | * 执行小车搬运任务 |
| | | */ |
| | | public synchronized void rgvRunWrkMastFullSta() { |
| | | public synchronized boolean rgvRunWrkMastFullSta() { |
| | | try{ |
| | | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | |
| | | |
| | | // 只有当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 |
| | |
| | | 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()); |
| | |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | return; |
| | | return true; |
| | | }else { |
| | | log.error("3864行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); |
| | | } |
| | |
| | | log.error("3875行执行小车搬运任务下发失败"); |
| | | log.error("3875行"+e); |
| | | } |
| | | return false; |
| | | } |
| | | /** |
| | | * 执行小车搬运任务//拆盘 |
| | | */ |
| | | public synchronized void rgvRunWrkMastEmptyStaPut() {//拆盘 |
| | | public synchronized boolean rgvRunWrkMastEmptyStaPut() {//拆盘 |
| | | try{ |
| | | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | |
| | | |
| | | // 只有当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 )////0 无物;1 一层无物二层有物 (只能拆叠) ;2一层有物二层无物 ;3 1、2层都有物 |
| | | && (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) { |
| | |
| | | } |
| | | 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; |
| | |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | return; |
| | | return true; |
| | | }else { |
| | | log.error("3857行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); |
| | | } |
| | |
| | | log.error("3933行执行小车放空板任务下发失败"); |
| | | log.error("3933行"+e); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 执行小车搬运任务 |
| | | */ |
| | | public synchronized void rgvRunWrkMastEmptyStaPutFull() {//满放 |
| | | public synchronized boolean rgvRunWrkMastEmptyStaPutFull() {//满放 |
| | | try{ |
| | | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | |
| | | |
| | | // 只有当RGV空闲、自动,工位二有物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && (rgvProtocol.getLoaded2()==2 || rgvProtocol.getLoaded2()==3 ) ////0 无物;1 一层无物二层有物 ;2一层有物二层无物 (只能满放);3 1、2层都有物 |
| | | && 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) { |
| | |
| | | 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:满放 |
| | | if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=6){// 2:空板 || 工作类型 1:取(叠盘) 2:拆盘 5:满取 6:满放 7:提升 |
| | | continue; |
| | | } |
| | | boolean sign = false; |
| | | if (wrkMastSta.getStaStart()==0 && wrkMastSta.getStaEnd()!=0){//满放 |
| | | 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; |
| | |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | return; |
| | | return true; |
| | | }else { |
| | | log.error("3857行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); |
| | | } |
| | |
| | | log.error("3933行执行小车放空板任务下发失败"); |
| | | log.error("3933行"+e); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | public synchronized void rgvRunWrkMastEmptyStaTake() {//叠盘 |
| | | public synchronized boolean rgvRunWrkMastEmptyStaTake() {//叠盘 |
| | | try{ |
| | | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | |
| | | |
| | | // 只有当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层都有物 |
| | | && (rgvProtocol.getLoaded2()==0 || rgvProtocol.getLoaded2()==1 ) //现场修改:叠盘机,////0 无物;1 一层无物二层有物(只能拆叠) ;2一层有物二层无物 (只能满放);3 1、2层都有物 4:()只允许拆盘 |
| | | ) { |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | if (basRgvMap == null) { |
| | |
| | | } |
| | | 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; |
| | |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | return; |
| | | return true; |
| | | }else { |
| | | log.error("3879行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); |
| | | } |
| | |
| | | log.error("3989行执行小车取空板任务下发失败"); |
| | | log.error("3989行"+e); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | public synchronized void rgvRunWrkMastEmptyStaTakeFull() {//满取 |
| | | public synchronized boolean rgvRunWrkMastEmptyStaTakeFull() {//满取 |
| | | try{ |
| | | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | |
| | | |
| | | // 只有当RGV空闲、自动,工位二无物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getLoaded2()==0 //现场修改:叠盘机,////0 无物;1 一层无物二层有物(只能拆叠) ;2一层有物二层无物 (只能满放);3 1、2层都有物 |
| | | && 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) { |
| | |
| | | continue; |
| | | } |
| | | boolean sign = false; |
| | | if (wrkMastSta.getStaEnd()==0 && wrkMastSta.getStaStart()!=0){//满取 |
| | | 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; |
| | |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | return; |
| | | return true; |
| | | }else { |
| | | log.error("3879行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); |
| | | } |
| | |
| | | log.error("3989行执行小车取空板任务下发失败"); |
| | | log.error("3989行"+e); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /* |
| | |
| | | && 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())){ |