| | |
| | | } |
| | | WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>() |
| | | .eq("barcode", barcode) |
| | | .in("io_type", 107,103,57)); |
| | | .in("io_type", 107,103,57,53)); |
| | | if (!Cools.isEmpty(checkPick)) { |
| | | continue; |
| | | } |
| | |
| | | staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo())); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | log.error("输送线下发2:"+dto.getWorkNo()+","+dto.getStaNo()); |
| | | log.info("输送线下发2:"+dto.getWorkNo()+","+dto.getStaNo()); |
| | | ledThread.errorReset(); |
| | | log.error("组托请求后LED错误清除"); |
| | | log.info("组托请求后LED错误清除"); |
| | | |
| | | if (!result) { |
| | | News.error(methodName + ":更新plc站点信息失败"); |
| | |
| | | // if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; } |
| | | |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) { |
| | | // 判断重复工作档 |
| | | WrkMast wrkMast1 = wrkMastMapper.selectPakInStep1(pickSta.getStaNo(), barcode); |
| | | if (wrkMast1 != null) { |
| | | int wrkNo1 = basDevpService.selectCount(new EntityWrapper<BasDevp>().eq("wrk_no", wrkMast1.getWrkNo())); |
| | | if (wrkNo1 != 0){ |
| | | News.error(barcode + "条码已存在状态为( 2.设备上走 )的数据,请查看WCS输送线界面,工作号={}", wrkMast1.getWrkNo()); |
| | | StaProtocol staProtocolNew = new StaProtocol(); |
| | | staProtocolNew.setWorkNo(wrkMast1.getWrkNo()); |
| | | staProtocolNew.setStaNo(RouteUtils.SouStaEnd(wrkMast1.getStaNo(),wrkMast1.getSourceStaNo())); |
| | | staProtocolNew.setSiteId(staProtocol.getSiteId()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | staProtocolNew.setBarcode(barcode); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocolNew)); |
| | | if (ledThread != null) { |
| | | MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, barcode + "条码已存在状态为( 2.设备上走 )的任务,工作号="+ wrkMast1.getWrkNo())); |
| | | } |
| | | continue; |
| | | } |
| | | barcodeThread.setBarcode(""); |
| | | staProtocol.setWorkNo(wrkMast1.getWrkNo()); |
| | | staProtocol.setStaNo(RouteUtils.SouStaEnd(null,wrkMast1.getSourceStaNo())); |
| | | staProtocol.setBarcode(barcode); |
| | | |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | log.info("输送线下发(存在设备上走的工作档,直接下发!)):"+wrkMast1.getWrkNo()+","+wrkMast1.getStaNo()); |
| | | |
| | | ledThread.errorReset(); |
| | | log.info("组托请求后LED错误清除"); |
| | | |
| | | if (!result) { |
| | | News.error( ":更新plc站点信息失败"); |
| | | log.error("输送线下发(存在设备上走的工作档,直接下发!)==>更新plc站点信息失败"); |
| | | continue; |
| | | } |
| | | continue; |
| | | |
| | | } |
| | | News.warnNoLog(""+mark+" - 0"+" - 开始执行"); |
| | | WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode); |
| | | // WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue()); |
| | |
| | | wrkMast.setIoTime(now); |
| | | wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57 |
| | | wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走 |
| | | wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站 |
| | | wrkMast.setSourceStaNo(staDesc.getStnNo()); // 源站 |
| | | wrkMast.setStaNo(staNo); // 目标站 |
| | | wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位 |
| | | wrkMast.setSourceLocNo(""); // 源库位清空 |
| | |
| | | wrkMast9997.setCrnEndTime(new Date()); |
| | | if (wrkMastMapper.updateById(wrkMast9997) != 0) { |
| | | // 复位堆垛机 |
| | | log.error("出库任务完成下发堆垛机复位,{}", wrkMast9997.getWrkNo()); |
| | | log.info("出库任务完成下发堆垛机复位,{}", wrkMast9997.getWrkNo()); |
| | | crnThread.setResetFlag(true); |
| | | } else { |
| | | News.error(""+mark+" - 1"+" - 更新工作档的工作状态为14失败!!! [工作号:{}]", wrkMast9997.getWrkNo()); |
| | |
| | | wrkMast9996.setCrnEndTime(new Date()); |
| | | if (wrkMastMapper.updateById(wrkMast9996) != 0) { |
| | | // 复位堆垛机 |
| | | log.error("出库任务完成下发堆垛机复位,{}", wrkMast9996.getWrkNo()); |
| | | log.info("出库任务完成下发堆垛机复位,{}", wrkMast9996.getWrkNo()); |
| | | crnThread.setResetFlag(true); |
| | | } else { |
| | | News.error(""+mark+" - 1"+" - 更新工作档的工作状态为14失败!!! [工作号:{}]", wrkMast9996.getWrkNo()); |
| | |
| | | wrkMast.setCrnEndTime(new Date()); |
| | | if (wrkMastMapper.updateById(wrkMast) != 0) { |
| | | // 复位堆垛机 |
| | | log.error("出库任务完成下发堆垛机复位,{}", wrkMast.getWrkNo()); |
| | | log.info("出库任务完成下发堆垛机复位,{}", wrkMast.getWrkNo()); |
| | | crnThread.setResetFlag(true); |
| | | } else { |
| | | News.error(""+mark+" - 1"+" - 更新工作档的工作状态为14失败!!! [工作号:{}]", wrkMast.getWrkNo()); |
| | |
| | | // 判断堆垛机出库站状态 |
| | | // if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") |
| | | // && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) { |
| | | |
| | | if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && !staProtocol.isLoading() |
| | | boolean unLoading = !staProtocol.isLoading(); |
| | | Config configAGVAUTOIN = configService.selectConfigByCode("COB"); |
| | | if(Boolean.parseBoolean(configAGVAUTOIN.getValue())){ |
| | | unLoading = true; |
| | | } |
| | | if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && unLoading |
| | | ) { |
| | | // if (slave.getId() == 1 || slave.getId() == 2){ |
| | | // if (staProtocol.isLoading() || staProtocol.getWorkNo() != 0 || !staProtocol.isOutEnable()){ |
| | | // continue; |
| | | // } |
| | | // } |
| | | // |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | |
| | | // 堆垛机控制过滤 |
| | |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | |
| | | if (staProtocol.isAutoing() //自动 |
| | | && !staProtocol.isLoading() //无物 |
| | | // && staProtocol.isOutEnable() //可出信号 |
| | |
| | | } |
| | | wrkMastSta.setWrkSts(2); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功"); |
| | | log.info("更新小车任务成功"); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"+ e); |
| | | } |
| | |
| | | } |
| | | wrkMastSta.setWrkSts(2); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功"); |
| | | log.info("更新小车任务成功"); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | |
| | | if(rgvProtocol.getStatusType1() == RgvStatusType.WORKING){ |
| | | rgvThread.setPaking(true); |
| | | } |
| | | |
| | | if(rgvProtocol.isLoaded1ing() && rgvProtocol.isLoaded2ing()){ |
| | | basRgv.setPakAll("1"); |
| | | basRgvService.updateById(basRgv); |
| | |
| | | if(rgvProtocol.getStatusType1() == RgvStatusType.IDLE && |
| | | rgvProtocol.getModeType() == RgvModeType.AUTO && rgvThread.isPakMk() |
| | | && rgvThread.isPaking() && basRgv.getPakAll().equals("1")){ |
| | | if(rgvProtocol.isLoaded1ing() || rgvProtocol.isLoaded2ing()){ |
| | | continue; |
| | | } |
| | | if(basRgv.getPakOut().equals("1") && basRgv.getPakIn().equals("1")){ |
| | | rgvPreSchedulingIn(rgv, rgvProtocol);//若暂无下发任务预调度提前到取货点 |
| | | if (rgvProtocol.getLastIo().equals("I")) { |
| | |
| | | try{ |
| | | wrkMastSta.setWrkSts(1); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功{}",wrkMastSta); |
| | | log.info("更新小车任务成功{}",wrkMastSta); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | break; // 新增:下发成功后退出循环,防止连续下发多个 |
| | | } else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | |
| | | try{ |
| | | wrkMastSta.setWrkSts(1); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功{}",wrkMastSta); |
| | | log.info("更新小车任务成功{}",wrkMastSta); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | break; // 新增:下发成功后退出循环,防止连续下发多个 |
| | | } else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | |
| | | try{ |
| | | wrkMastSta.setWrkSts(1); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功{}",wrkMastSta); |
| | | log.info("更新小车任务成功{}",wrkMastSta); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | break; // 新增:下发成功后退出循环,防止连续下发多个 |
| | | } else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | |
| | | try{ |
| | | wrkMastSta.setWrkSts(1); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功"); |
| | | log.info("更新小车任务成功"); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | |
| | | //遍历rgv入库取货站点 |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(rgvStn.getStaNo2()==1043?1044:1103); //倒数第二个 |
| | | StaProtocol staProtocol2 = null; //连续取货任务站点 |
| | | StaProtocol staProtocol1 = devpThread.getStation().get(rgvStn.getStaNo()); //第一个站点判断 |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, (int) rgvProtocol.getRgvNo()); |
| | | // WrkMastSta wrkMastSta3 = null;//连取两个 |
| | | // Integer staNo = null; //与调度 |
| | |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol1 == null) { |
| | | News.infoNoLog( " - Rgv入库站信息(staProtocol!=null继续执行):staProtocol=" + staProtocol); |
| | | continue; |
| | | } else { |
| | | staProtocol1 = staProtocol1.clone(); |
| | | } |
| | | if(staProtocol1.isLoading() || staProtocol1.getWorkNo()!=0){ |
| | | continue; |
| | | } |
| | | // 查询站点详细信息 |
| | | BasDevp staDetl = basDevpService.selectById(rgvStn.getStaNo()); |
| | |
| | | try{ |
| | | wrkMastSta.setWrkSts(1); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功{}",wrkMastSta); |
| | | log.info("更新小车任务成功{}",wrkMastSta); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | break; // 新增:下发成功后退出循环,防止连续下发多个 |
| | | } else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | |
| | | BasRgvOpt basRgvOpt = basRgvOptService.getBasRgvOpt(rgvId); |
| | | // 防止重复下发命令 |
| | | if (basRgvOpt != null) { |
| | | if (typeNo.equals(basRgvOpt.getMode()) && basRgvOpt.getPosSta().equals(wrkMastSta.getWorkSta())) { |
| | | if (basRgvOpt.getMode().equals(typeNo) && basRgvOpt.getPosSta().equals(wrkMastSta.getWorkSta())) { |
| | | // 如果最新记录的 mode 和 posSta 与当前命令相同,认为是重复命令 |
| | | log.error("命令重复下发,当前命令与最新记录相同,任务不下发!"); |
| | | return false; |
| | | } |
| | | log.info("rgv命令日志wrkNo={},posSta={},mode={}",wrkMastSta.getWrkNo(),basRgvOpt.getPosSta(),basRgvOpt.getMode()); |
| | | } |
| | | rgvCommand.setTaskNo(Math.toIntExact(wrkMastSta.getWrkNo())); // 工位工作号 |
| | | rgvCommand.setTaskStatus(type); // 工位任务模式: 取货 |
| | |
| | | } |
| | | if(!Cools.isEmpty(barcode)) { |
| | | if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "0".equals(barcode) || barcode.length()<5) { |
| | | if(!staProtocol.isLoading()){ |
| | | continue; |
| | | } |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "拆垛条码为空", staProtocol.getSiteId()+"码垛位置,===》托盘条码为空", false); |
| | | continue; |
| | | } |
| | | } else { |
| | | if(!staProtocol.isLoading()){ |
| | | continue; |
| | | } |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "拆垛条码为空", staProtocol.getSiteId()+"码垛位置,===》托盘条码为空", false); |
| | | continue; |
| | | } |
| | |
| | | } |
| | | |
| | | if(barcode.length()!=6){ |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "条码长度不是6位", staProtocol.getSiteId()+"码垛位置,条码长度不是6位===>>" + barcode, false); |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "条码长度不是6位", staProtocol.getSiteId()+"码垛位置,条码长度不是6位===>>" + barcode, true); |
| | | continue; |
| | | } |
| | | |
| | |
| | | int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",barcode)); |
| | | int countwait = waitPakinMapper.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",barcode)); |
| | | if (countLoc > 0 || countWrk > 0 || countwait > 0) { |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "条码数据已存在", staProtocol.getSiteId()+"码垛位置,组托档/工作档/库存条码数据已存在===>>" + barcode, false); |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "条码数据已存在", staProtocol.getSiteId()+"码垛位置,组托档/工作档/库存条码数据已存在===>>" + barcode, true); |
| | | continue; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | if(barcode.length()!=6){ |
| | | armTaskAssignmentCallApiLogSave(locMastEnd, "条码长度不是6位", basArm.getStaNoSou()+"码垛位置,条码长度不是6位===>>" + barcode, false); |
| | | armTaskAssignmentCallApiLogSave(locMastEnd, "条码长度不是6位", basArm.getStaNoSou()+"码垛位置,条码长度不是6位===>>" + barcode, true); |
| | | continue; |
| | | } |
| | | |
| | |
| | | int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",barcode)); |
| | | int countwait = waitPakinMapper.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",barcode)); |
| | | if (countLoc > 0 || countWrk > 0 || countwait > 0) { |
| | | armTaskAssignmentCallApiLogSave(locMastEnd, "条码数据已存在", basArm.getStaNoSou()+"码垛位置,组托档/工作档/库存条码数据已存在===>>" + barcode, false); |
| | | armTaskAssignmentCallApiLogSave(locMastEnd, "条码数据已存在", basArm.getStaNoSou()+"码垛位置,组托档/工作档/库存条码数据已存在===>>" + barcode, true); |
| | | continue; |
| | | } |
| | | |
| | |
| | | // 遍历结果集,检查时间戳差值是否小于 5 分钟 |
| | | for (ApiLog apiLog : apiLogs) { |
| | | long parseLong = Long.parseLong(apiLog.getTimestamp()); |
| | | if (new Date().getTime() - parseLong < 5 * 1000 * 60) { |
| | | if (new Date().getTime() - parseLong < 30 * 1000 * 60) { |
| | | // 如果找到符合条件的记录且时间差小于 5 分钟,则不保存新记录,直接返回 |
| | | return; |
| | | } |
| | |
| | | // 遍历结果集,检查时间戳差值是否小于 5 分钟 |
| | | for (ApiLog apiLog : apiLogs) { |
| | | long parseLong = Long.parseLong(apiLog.getTimestamp()); |
| | | if (new Date().getTime() - parseLong < 5 * 1000 * 60) { |
| | | if (new Date().getTime() - parseLong < 30 * 1000 * 60) { |
| | | // 如果找到符合条件的记录且时间差小于 5 分钟,则不保存新记录,直接返回 |
| | | return; |
| | | } |
| | |
| | | * agv任务生成 Empty |
| | | * */ |
| | | public synchronized void agvTaskCreateEmpty() { |
| | | Config configAGVAUTOIN = configService.selectConfigByCode("AGVAUTOIN"); |
| | | if(!Boolean.parseBoolean(configAGVAUTOIN.getValue())){ |
| | | return; |
| | | } |
| | | // 根据输送线plc遍历 |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | // 遍历出库口 |
| | |
| | | // 获取站点信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, basAgvMast.getFloorNo() !=1?2:1); |
| | | StaProtocol staProtocol = devpThread.getStation().get(basAgvMast.getStaNo()); |
| | | List<BasAgvMast> basAgvMastList1 = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("status", 1).eq("sta_no", basAgvMast.getStaNo())); |
| | | if(basAgvMastList1.size()>0){ |
| | | continue; |
| | | } |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |