| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.*; |
| | | import java.util.concurrent.atomic.AtomicInteger; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | |
| | | // 成品库堆垛机出库站点到rgv接驳点 |
| | | public static final Map<Integer,Short> crnOutSiteToRgvSite = new HashMap<>(); |
| | | public static final Map<Integer,Short> crnOutSiteToRgvSite2 = new HashMap<>(); |
| | | |
| | | static { |
| | | emptyPalletSiteMap.put(1001,"M"); // emptyPalletSiteMap.put(1002,"M"); |
| | |
| | | outGzxSiteList.add(1081);outGzxSiteList.add(1084);outGzxSiteList.add(1087); |
| | | |
| | | crnOutSiteToRgvSite.put(1093, (short) 1091);crnOutSiteToRgvSite.put(1099, (short) 1097);crnOutSiteToRgvSite.put(1107, (short) 1105); |
| | | |
| | | crnOutSiteToRgvSite2.put(1087, (short) 1089);crnOutSiteToRgvSite2.put(1084, (short) 1086);crnOutSiteToRgvSite2.put(1081, (short) 1083); |
| | | crnOutSiteToRgvSite2.put(1043, (short) 1041);crnOutSiteToRgvSite2.put(1016, (short) 1018);crnOutSiteToRgvSite2.put(1008, (short) 1006); |
| | | } |
| | | |
| | | @Autowired |
| | |
| | | |
| | | @Resource |
| | | private ConfigService configService; |
| | | |
| | | @Resource |
| | | private BasDevpErrLogService basDevpErrLogService; |
| | | |
| | | @Value("${wms.url}") |
| | | private String wmsUrl; |
| | |
| | | crnProtocol.setLastIo("O"); |
| | | } else if (basCrnp.getOutEnable().equals("Y")) { |
| | | //mark - 2 - .... |
| | | this.locToCrnStn(crn, crnProtocol,mark); // 出库 |
| | | AtomicInteger atomicInteger = new AtomicInteger(mark); |
| | | this.locToCrnStn(crn, crnProtocol,atomicInteger); // 出库 |
| | | crnProtocol.setLastIo("I"); |
| | | if(atomicInteger.get() == 99) { // 下一次还是出库 |
| | | crnProtocol.setLastIo("O"); |
| | | } |
| | | } |
| | | } |
| | | // 如果最近一次是出库模式 |
| | | else if (crnProtocol.getLastIo().equals("O")) { |
| | | if (basCrnp.getOutEnable().equals("Y")) { |
| | | this.locToCrnStn(crn, crnProtocol,mark); // 出库 |
| | | AtomicInteger atomicInteger = new AtomicInteger(mark); |
| | | this.locToCrnStn(crn, crnProtocol,atomicInteger); // 出库 |
| | | crnProtocol.setLastIo("I"); |
| | | if(atomicInteger.get() == 99) { // 下一次还是出库 |
| | | crnProtocol.setLastIo("O"); |
| | | } |
| | | } else if (basCrnp.getInEnable().equals("Y")) { |
| | | this.crnStnToLoc(crn, crnProtocol,mark); // 入库 |
| | | crnProtocol.setLastIo("O"); |
| | |
| | | // 判断1050是否有货 |
| | | StaProtocol staProtocol1 = devpThread.getStation().get(1050); |
| | | if(staProtocol1.isAutoing() && staProtocol1.isLoading() && staProtocol1.isInEnable() && staProtocol1.getWorkNo() != 0) { |
| | | |
| | | // 分配库位 |
| | | boolean isContinue =getLocNoNew(staProtocol1.getWorkNo(),wrkMast); |
| | | // 是否不继续往下执行 |
| | | if (isContinue) { |
| | | continue; |
| | | } |
| | | } else { |
| | | continue; |
| | | } |
| | |
| | | wrkMast.setIoPri(14D); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | // 生成工作档,将浅库位移转到新的库位中 |
| | | moveLocForDeepLoc(slave, shallowLoc,mark); |
| | | moveLocForDeepLoc(slave, shallowLoc,new AtomicInteger(mark)); |
| | | // 生成工作档、改变浅库位的源库/目标库 库位状态、下发堆垛机命令(立马执行) |
| | | // moveLocForDeepLocPakin(slave, shallowLoc, wrkMast); |
| | | } |
| | |
| | | if(crnStn.getStaNo() == 1050 && locMast.getRow1() == 10) { |
| | | crnCommand.setDestinationPosX((short) 9); |
| | | } |
| | | if(crnStn.getStaNo() == 1049 && locMast.getRow1() == 11) { |
| | | crnCommand.setDestinationPosX((short) 12); |
| | | if(crnStn.getStaNo() == 1049 && locMast.getRow1() == 10) { |
| | | crnCommand.setDestinationPosX((short) 9); |
| | | } |
| | | crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 目标库位层 |
| | |
| | | News.infoNoLog(""+mark+" - 1"+" - 0"+" - 堆垛机入出库作业下发 : 入库执行完毕"); |
| | | } |
| | | |
| | | private boolean getLocNoNew(Integer workNo1050, WrkMast wrkMast1049) { |
| | | if(!wrkMast1049.getLocNo().isEmpty()) { |
| | | return false; |
| | | } |
| | | WrkMast wrkMast1050 = wrkMastMapper.selectPakInStep2(4, workNo1050); |
| | | // 判断1050没有被堆垛机取,并且没有尾拖信号 |
| | | if(wrkMast1050 != null && wrkMast1050.getCtnType() != 1) { |
| | | // 判断这两个货是不是一种类型,不是给1050分配库位,给尾拖标识,是则给两个货分配库位 |
| | | if(wrkMast1050.getPdcType().equals(wrkMast1049.getPdcType())) { |
| | | // 取新库位组的第一个库位 |
| | | List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("crn_no", 4).eq("loc_sts", "O")); |
| | | List<LocMast> collect = locMasts.stream().filter(locMast1 -> locMast1.getRow1() == 9 || locMast1.getRow1() == 11).collect(Collectors.toList()); |
| | | List<LocMast> collect1 = locMasts.stream().filter(locMast1 -> locMast1.getRow1() == 10 || locMast1.getRow1() == 12).collect(Collectors.toList()); |
| | | if (collect.size() <= 0 && collect1.size() <= 0) { |
| | | News.error("站点:{},任务号{}:入库空桶库无空库位",1050,workNo1050); |
| | | return true; |
| | | } |
| | | // 可用库位组 |
| | | List<LocMast> locMastList = new ArrayList<>(); |
| | | for(LocMast locMast1:collect) { |
| | | Optional<LocMast> first = collect1.stream().filter(locMast2 -> locMast1.getRow1() + 1 == locMast2.getRow1() && Objects.equals(locMast1.getLev1(), locMast2.getLev1()) |
| | | && Objects.equals(locMast1.getBay1(), locMast2.getBay1())).findFirst(); |
| | | first.ifPresent(locMastList::add); |
| | | } |
| | | |
| | | if (locMastList.size() == 0) { |
| | | News.error("站点:{},任务号{}:入库空桶库无对应空空桶组",1050,workNo1050); |
| | | return true; |
| | | } |
| | | WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", workNo1050)); |
| | | if (wrkDetl.getModel().equals("208L") && locMastList.size() <= 40 * 2 * 2) { // 最上面一层只能放208L,库位剩余量不多时,如果是208L桶入库,则先从最顶层放 |
| | | locMastList = locMastList.stream().sorted(Comparator.comparing(LocMast::getLev1).reversed().thenComparing(LocMast::getBay1).thenComparing(LocMast::getRow1)).collect(Collectors.toList()); |
| | | } else { |
| | | locMastList = locMastList.stream().sorted(Comparator.comparing(LocMast::getLev1).thenComparing(LocMast::getBay1).thenComparing(LocMast::getRow1)).collect(Collectors.toList()); |
| | | } |
| | | // 1049对应库位 |
| | | LocMast locMast = locMastList.get(0); |
| | | |
| | | wrkMast1049.setLocNo(locMast.getLocNo()); |
| | | wrkMastService.updateById(wrkMast1049); |
| | | if (locMast.getLocSts().equals("O")){ |
| | | locMast.setLocSts("S"); // S.入库预约 |
| | | locMast.setModiTime(new Date()); |
| | | if (!locMastService.updateById(locMast)){ |
| | | News.error("站点:{},任务号{}:改变库位{}状态{}失败",1049,wrkMast1049.getWrkNo(),locMast.getLocNo(),locMast.getLocSts()); |
| | | } else { |
| | | // 给1050分配对应库位 |
| | | Optional<LocMast> first = collect.stream().filter(locMast1 -> locMast1.getLocNo().equals((locMast.getRow1() == 10 ? "09" : "11") + locMast.getLocNo().substring(2))).findFirst(); |
| | | if(first.isPresent()) { |
| | | LocMast locMast1 = first.get(); |
| | | wrkMast1050.setLocNo(locMast1.getLocNo()); |
| | | |
| | | locMast1.setLocSts("S"); // S.入库预约 |
| | | locMast1.setModiTime(new Date()); |
| | | wrkMastService.updateById(wrkMast1050); // 更新分配的库位 |
| | | locMastService.updateById(locMast1); // 更新库位状态 |
| | | return false; |
| | | } else { |
| | | News.error("站点:{},任务号{}:空库位组{}无对应空库位",1050,workNo1050,locMast.getLocNo()); |
| | | } |
| | | } |
| | | } else { |
| | | News.error("站点:{},任务号{}:目标库位:{}已被占用",1049,wrkMast1049.getWrkNo(),locMast.getLocNo()); |
| | | } |
| | | } else { |
| | | // 取新库位组的第一个库位 |
| | | List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("crn_no", 4).eq("loc_sts", "O")); |
| | | List<LocMast> collect = locMasts.stream().filter(locMast1 -> locMast1.getRow1() == 9 || locMast1.getRow1() == 11).collect(Collectors.toList()); |
| | | List<LocMast> collect1 = locMasts.stream().filter(locMast1 -> locMast1.getRow1() == 10 || locMast1.getRow1() == 12).collect(Collectors.toList()); // 第一个先放这两排 |
| | | if (collect.size() <= 0 && collect1.size() <= 0) { |
| | | News.error("站点:{},任务号{}:入库空桶库无空库位",1050,workNo1050); |
| | | return true; |
| | | } |
| | | // 可用库位组 |
| | | List<LocMast> locMastList = new ArrayList<>(); |
| | | for(LocMast locMast1:collect) { |
| | | Optional<LocMast> first = collect1.stream().filter(locMast2 -> locMast1.getRow1() + 1 == locMast2.getRow1() && Objects.equals(locMast1.getLev1(), locMast2.getLev1()) |
| | | && Objects.equals(locMast1.getBay1(), locMast2.getBay1())).findFirst(); |
| | | first.ifPresent(locMastList::add); |
| | | } |
| | | |
| | | if (locMastList.size() == 0) { |
| | | News.error("站点:{},任务号{}:入库空桶库无对应空空桶组",1050,workNo1050); |
| | | return true; |
| | | } |
| | | WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", workNo1050)); |
| | | if (wrkDetl.getModel().equals("208L") && locMastList.size() <= 40 * 2 * 2) { // 最上面一层只能放208L,库位剩余量不多时,如果是208L桶入库,则先从最顶层放 |
| | | locMastList = locMastList.stream().sorted(Comparator.comparing(LocMast::getLev1).reversed().thenComparing(LocMast::getBay1).thenComparing(LocMast::getRow1)).collect(Collectors.toList()); |
| | | } else { |
| | | locMastList = locMastList.stream().sorted(Comparator.comparing(LocMast::getLev1).thenComparing(LocMast::getBay1).thenComparing(LocMast::getRow1)).collect(Collectors.toList()); |
| | | } |
| | | LocMast locMast = locMastList.get(0); |
| | | wrkMast1050.setLocNo(locMast.getLocNo()); |
| | | wrkMast1050.setCtnType(1); // 尾托标识 |
| | | wrkMastService.updateById(wrkMast1050); |
| | | if (locMast.getLocSts().equals("O")){ |
| | | locMast.setLocSts("S"); // S.入库预约 |
| | | locMast.setModiTime(new Date()); |
| | | if (!locMastService.updateById(locMast)){ |
| | | News.error("站点:{},任务号{}:改变库位{}状态{}失败",1050,workNo1050,locMast.getLocNo(),locMast.getLocSts()); |
| | | } |
| | | } else { |
| | | News.error("站点:{},任务号{}:目标库位:{}已被占用",1050,workNo1050,locMast.getLocNo()); |
| | | } |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 出库 ===>> 库位到堆垛机站 |
| | | * 2022-06-09 TQS修改,查询工作档LIST,遍历下发,防止第一个任务堵塞出库 |
| | | */ |
| | | public synchronized void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol,Integer mark) { |
| | | public synchronized void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol,AtomicInteger mark) { |
| | | News.warnNoLog(""+mark+" - 2"+" - 0"+" - 堆垛机入出库作业下发:执行出库"); |
| | | boolean crnAvailableOut = false; |
| | | Config config = configService.selectOne(new EntityWrapper<Config>().eq("code","removeCrnAvailableOut")); |
| | | if (config != null && config.getStatus() == 1) { |
| | | crnAvailableOut = true; |
| | | if (config != null && config.getStatus() == 1 && !Cools.isEmpty(config.getValue())) { |
| | | // 需要自动补空桶的站点 |
| | | String[] split = config.getValue().split("="); |
| | | for (String item : split) { |
| | | if (slave.getId() == Integer.parseInt(item)) { |
| | | crnAvailableOut = true; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | // 限制去捆绑机器任务数 |
| | | int kbWrks = wrkMastMapper.selectCountByKb(); |
| | |
| | | if (wrkMast == null) { |
| | | continue; |
| | | } |
| | | // 判断任务目标站点是否是出库模式 |
| | | if(wrkMast.getStaNo() == 1016 || wrkMast.getStaNo() == 1043) { |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getStaNo()); |
| | | if(staProtocol.getInOrOutMode() != 2) { |
| | | News.error("{}任务目标站点:{},当前模式:{}不是出库模式,无法出库",wrkMast.getWrkNo(),wrkMast.getStaNo(),staProtocol.getInOrOutMode()); |
| | | continue; |
| | | } |
| | | } |
| | | if (wrkMast.getStaNo() == 1031) { |
| | | // 获取1033无状态时任务数+1 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | |
| | | if (staProtocol.isLoading() && staProtocol.getWorkNo() == 0) { |
| | | kbWrks ++; |
| | | } |
| | | if (kbWrks > 1) { |
| | | if (kbWrks > 2) { |
| | | continue; |
| | | } |
| | | } |
| | |
| | | wrkMast1.setSourceStaNo(1056); |
| | | wrkMastService.updateById(wrkMast1); |
| | | } |
| | | mark.set(99); |
| | | break; |
| | | } |
| | | } |
| | |
| | | if(wrkMast.getWorkNoOther() != 0 ){ |
| | | WrkMast wrkMast1 = wrkMastService.selectByWrkNo(wrkMast.getWorkNoOther()); |
| | | if (wrkMast1 != null) { |
| | | // 交换库位号 |
| | | // // 交换库位号 |
| | | String locNo = wrkMast.getLocNo(); |
| | | wrkMast.setLocNo(wrkMast1.getLocNo()); |
| | | // wrkMast.setLocNo(wrkMast1.getLocNo()); |
| | | // 交换入库时间,提取库存时按顺序先浅后深 |
| | | Date ioTime = wrkMast.getIoTime(); |
| | | if(locNo.startsWith("10")) { |
| | | wrkMast.setIoTime(wrkMast1.getIoTime()); |
| | | wrkMast1.setIoTime(ioTime); |
| | | } |
| | | wrkMast1.setLocNo(locNo); |
| | | // wrkMast1.setLocNo(locNo); |
| | | wrkMast1.setCrnEndTime(now); |
| | | wrkMast1.setModiTime(now); |
| | | wrkMast1.setWrkSts(4L); |
| | |
| | | if (crnProtocol == null) { |
| | | continue; |
| | | } |
| | | if (true) { |
| | | // if (crnProtocol.getModeType() != CrnModeType.STOP) { |
| | | // if (true) { |
| | | if (crnProtocol.getModeType() != CrnModeType.STOP) { |
| | | // 有任务 |
| | | if (crnProtocol.getTaskNo() != 0) { |
| | | |
| | | BasErrLog latest = basErrLogService.findLatestByTaskNo(crn.getId(), crnProtocol.getTaskNo().intValue()); |
| | | // 有异常 |
| | | if (latest == null) { |
| | | News.warnNoLog(""+mark+" - 1"+" - 开始执行:堆垛机异常信息记录 : 有任务,有异常"); |
| | | // News.warnNoLog(""+mark+" - 1"+" - 开始执行:堆垛机异常信息记录 : 有任务,有异常"); |
| | | if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) { |
| | | WrkMast wrkMast = wrkMastMapper.selectById(crnProtocol.getTaskNo()); |
| | | if (wrkMast == null) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 输送线异常 |
| | | */ |
| | | public synchronized void recDevpErr() { |
| | | Date now = new Date(); |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | Integer devpId = devp.getId(); |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpId); |
| | | Map<Integer, StaProtocol> station = devpThread.getStation(); |
| | | for (Map.Entry<Integer, StaProtocol> entry : station.entrySet()) { |
| | | Integer siteNo = entry.getKey(); |
| | | StaProtocol staProtocol = entry.getValue(); |
| | | Integer workNo = staProtocol.getWorkNo(); |
| | | // 输送线报警 |
| | | String plcErr = staPlcErr(staProtocol); |
| | | if (staProtocol.isAutoing()) { |
| | | // 有任务 |
| | | if (staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() <= 9000) { |
| | | |
| | | // 获取输送线报警信息 |
| | | BasDevpErrLog latestByTaskNo = basDevpErrLogService.findLatestByTaskNo(siteNo, workNo); |
| | | |
| | | // 有异常 |
| | | if (latestByTaskNo == null) { |
| | | if (!plcErr.equals("")) { |
| | | WrkMast wrkMast = wrkMastMapper.selectById(workNo); |
| | | if (wrkMast == null) { |
| | | continue; |
| | | } |
| | | |
| | | BasDevpErrLog basErrLog = new BasDevpErrLog( |
| | | null, // 编号 |
| | | wrkMast.getWrkNo(), // 工作号 |
| | | now, // 发生时间 |
| | | null, // 结束时间 |
| | | wrkMast.getWrkSts(), // 工作状态 |
| | | wrkMast.getIoType(), // 入出库类型 |
| | | wrkMast.getCrnNo(), // 堆垛机 |
| | | devpId, // plc |
| | | wrkMast.getLocNo(), // 目标库位 |
| | | wrkMast.getStaNo(), // 目标站 |
| | | siteNo, // 源站 |
| | | wrkMast.getSourceLocNo(), // 源库位 |
| | | wrkMast.getBarcode(), // 条码 |
| | | 0, // 异常码 |
| | | plcErr, // 异常 |
| | | 1, // 异常情况 |
| | | now, // 添加时间 |
| | | null, // 添加人员 |
| | | now, // 修改时间 |
| | | null, // 修改人员 |
| | | "任务中异常" // 备注 |
| | | ); |
| | | if (!basDevpErrLogService.insert(basErrLog)) { |
| | | log.error("输送线异常信息插入表asr_bas_devp_err_log异常:{}", basErrLog); |
| | | } |
| | | } |
| | | } else { |
| | | // 异常修复 |
| | | if (plcErr.equals("")) { |
| | | latestByTaskNo.setEndTime(now); |
| | | latestByTaskNo.setUpdateTime(now); |
| | | latestByTaskNo.setStatus(2); |
| | | if (!basDevpErrLogService.updateById(latestByTaskNo)) { |
| | | log.error("输送线异常记录修复失败asr_bas_devp_err_log异常:{}", latestByTaskNo); |
| | | } |
| | | } |
| | | } |
| | | // 无任务 |
| | | } else { |
| | | BasDevpErrLog latest = basDevpErrLogService.findLatest(siteNo); |
| | | // 有异常 |
| | | if (!plcErr.equals("")) { |
| | | // 记录新异常 |
| | | if (latest == null || !latest.getError().equals(plcErr) || latest.getStatus() == 2 ) { |
| | | BasDevpErrLog basErrLog = new BasDevpErrLog( |
| | | null, // 编号 |
| | | null, // 工作号 |
| | | now, // 发生时间 |
| | | null, // 结束时间 |
| | | null, // 工作状态 |
| | | null, // 入出库类型 |
| | | 0, // 堆垛机 |
| | | devpId, // plc |
| | | null, // 目标库位 |
| | | null, // 目标站 |
| | | siteNo, // 源站 |
| | | null, // 源库位 |
| | | null, // 条码 |
| | | 0, // 异常码 |
| | | plcErr, // 异常 |
| | | 1, // 异常情况 |
| | | now, // 添加时间 |
| | | null, // 添加人员 |
| | | now, // 修改时间 |
| | | null, // 修改人员 |
| | | "无任务异常" // 备注 |
| | | ); |
| | | if (!basDevpErrLogService.insert(basErrLog)) { |
| | | log.error("输送线异常记录asr_bas_devp_err_log异常:{}", basErrLog); |
| | | } |
| | | } |
| | | // 无异常 |
| | | } else { |
| | | // 异常修复 |
| | | if (latest != null && latest.getStatus() == 1) { |
| | | latest.setEndTime(now); |
| | | latest.setUpdateTime(now); |
| | | latest.setStatus(2); |
| | | if (!basDevpErrLogService.updateById(latest)) { |
| | | log.error("输送线异常记录修复失败asr_bas_devp_err_log异常:{}", latest); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 获取输送线报警 |
| | | public String staPlcErr(StaProtocol staProtocol){ |
| | | Integer siteId = staProtocol.getSiteId(); |
| | | if (staProtocol.getBreakerErr()){ |
| | | return "断路器故障"; |
| | | } |
| | | if (staProtocol.getInfraredErr()){ |
| | | return "光电异常"; |
| | | } |
| | | if (staProtocol.getOutTimeErr()){ |
| | | return "运行超时"; |
| | | } |
| | | if (staProtocol.getSeizeSeatErr()){ |
| | | return "占位超时"; |
| | | } |
| | | if (staProtocol.getWrkYgoodsN()){ |
| | | return "有任务无货故障"; |
| | | } |
| | | if (staProtocol.getInverterErr()){ |
| | | return "变频器故障"; |
| | | } |
| | | if (staProtocol.getContactErr()){ |
| | | return "电机接触器故障"; |
| | | } |
| | | if (staProtocol.getUpcontactErr()){ |
| | | return "顶升电机接触器故障"; |
| | | } |
| | | if (staProtocol.isFrontErr()){ |
| | | return "前超限"; |
| | | } |
| | | if (staProtocol.isBackErr()){ |
| | | return "后超限"; |
| | | } |
| | | if (staProtocol.isHighErr()){ |
| | | return "高超限"; |
| | | } |
| | | if (staProtocol.isLeftErr()){ |
| | | return "左超限"; |
| | | } |
| | | if (staProtocol.isRightErr()){ |
| | | return "右超限"; |
| | | } |
| | | if (staProtocol.isBarcodeErr() && siteId != 1083 && siteId != 1086 && siteId != 1089 ){ |
| | | return "扫码失败"; |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * 出库 ===>> 工作档信息写入led显示器 |
| | | */ |
| | | public synchronized void ledExecute(Integer mark) { |
| | |
| | | ledCommand.setTitle("空板出库"); |
| | | ledCommand.setEmptyMk(true); |
| | | break; |
| | | case 120: |
| | | ledCommand.setTitle("手动转移"); |
| | | break; |
| | | default: |
| | | News.error("任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkMast.getWrkNo(), wrkMast.getIoType()); |
| | | break; |
| | |
| | | // 明细 |
| | | WrkDetl wrkDetl1 = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); |
| | | if (wrkDetl1 != null) { |
| | | // 出库任务的四个出库站点,判断当前物料一批出库的时间 获取当前已完成 / 总数 |
| | | if(wrkMast.getIoType() == 101 && (wrkMast.getStaNo() == 1024 ||wrkMast.getStaNo() == 1040 ||wrkMast.getStaNo() == 1043 ||wrkMast.getStaNo() == 1016) ) { |
| | | int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 101).eq("io_time", wrkMast.getIoTime())); |
| | | int countHis = wrkMastMapper.selectCountHisByIoTypeAndIoTime(101, wrkMast.getIoTime()); |
| | | matDto.setOutTotal(count+countHis); |
| | | matDto.setIsOutCount(countHis + 1); |
| | | } |
| | | ledCommand.setOrderNo(wrkDetl1.getOrderNo()); |
| | | matDto.setMaknx(wrkDetl1.getMaktx()); |
| | | matDto.setMatnr(wrkDetl1.getMatnr()); |
| | |
| | | if (staProtocol.getWorkNo() != 0) { |
| | | reset = false; |
| | | break; |
| | | } else { |
| | | // 入库在无物的时候才清除异常 |
| | | if(staNo == 1006 || staNo == 1012 || staNo == 1018 || staNo == 1041) { |
| | | if(staProtocol.isLoading()) { |
| | | reset = false; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | // 获取led线程 |
| | |
| | | * 因双深库位阻塞,对浅库位进行移转(立即执行版) |
| | | * tip:同步 |
| | | */ |
| | | private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc,Integer mark) { |
| | | private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc,AtomicInteger mark) { |
| | | |
| | | // 只有208L能放11层 |
| | | String model = null; |
| | |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.isInEnable() || staProtocol.isOutEnable() && site == 1090) && staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() < 9000) { |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.isInEnable() || staProtocol.isOutEnable() && site == 1090) && staProtocol.getWorkNo() != 0 && (staProtocol.getWorkNo() <= 9000 || staProtocol.getWorkNo()>=30000)) { |
| | | if (staProtocol.getSiteId() == 1034 && !staProtocol.isHigh()) { // 1034空母拖回流任务需要高信号 |
| | | continue; |
| | | } |
| | |
| | | if (staProtocol.getSiteId() == 1090 && wrkMast.getStaNo() == 1090) { |
| | | continue; |
| | | } |
| | | if ((wrkMast.getWrkSts() == 2 || wrkMast.getWrkSts() == 15) && (wrkMast.getRgvNo() == null || wrkMast.getRgvDstaNo() == 1090)) { |
| | | if ((wrkMast.getWrkSts() == 2 || wrkMast.getWrkSts() == 15 || (wrkMast.getIoType() == 120 && wrkMast.getWrkSts() == 52)) && (wrkMast.getRgvNo() == null || wrkMast.getRgvDstaNo() == 1090)) { |
| | | // 有1090的任务跳过rgv分配 |
| | | if(wrkMast.getStaNo() == 1090) { |
| | | DevpThread devpThread2 = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | |
| | | continue; |
| | | } |
| | | wrkMast.setWrkSts(15L); |
| | | wrkMast.setModiTime(new Date()); |
| | | wrkMastService.updateById(wrkMast); |
| | | // 1020切换出库模式,如果有托盘入拆盘机,不给输送线下发命令 |
| | | if(wrkMast.getStaNo() == 1020) { |
| | | if(staProtocol.getInOrOutMode() != 1) { |
| | | continue; |
| | | } |
| | | } |
| | | } else if(wrkMast.getIoType() == 120) { |
| | | if(wrkMast.getWrkSts() != 53 ){ |
| | | log.warn("rgv放货完成120,rgv未复位:rgv号{},任务号:{},任务状态{}",wrkMast.getRgvNo(),wrkMast.getWrkNo(),wrkMast.getWrkSts()); |
| | | continue; |
| | | } |
| | | wrkMast.setWrkSts(54L); |
| | | wrkMast.setModiTime(new Date()); |
| | | wrkMastService.updateById(wrkMast); |
| | | } |
| | |
| | | |
| | | } |
| | | } else if (wantBucket.getSite() == 1071 && count <= 2 || wantBucket.getSite() == 1064 && count == 0 || wantBucket.getSite() == 1078 && count <= 2) { // 可以出两个 |
| | | // 自动出空桶,均匀出到每台罐装线 |
| | | Integer count1 = wrkMastMapper.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", 4).eq("sta_no",wantBucket.getSite()).in("wrk_sts", 11,12)); |
| | | if(count1 > 0) { |
| | | return; |
| | | } |
| | | log.info("{}自动补空桶,罐装线要桶型信息:{},正在执行任务数:{}", wantBucket.getSite(), wantBucket.getBucketType(), count); |
| | | // 判断库里有无空桶组 |
| | | List<LocDetl> locDetlList = locDetlService.selectListByMatnr(wantBucket.getBucketType()); |
| | |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.getWorkNo() != 0) { |
| | | // 查询工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo()); |
| | | if (wrkMast != null && wrkMast.getWhsType() == null) { |
| | | if (wrkMast != null && wrkMast.getWhsType() == null && wrkMast.getIoType() != 120) { |
| | | WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); |
| | | staProtocol.setBucketType(wrkDetl.getMatnr()); |
| | | staProtocol.setBucketCount(wrkDetl.getAnfme().intValue()); |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 手动站位转移 |
| | | */ |
| | | public synchronized void manualStationTransfer() { |
| | | WrkMast wrkMast = wrkMastMapper.selectByIoTypeAndWrkSts(120, 51L); |
| | | |
| | | if (Cools.isEmpty(wrkMast)) { |
| | | return; |
| | | } |
| | | int devpId; |
| | | if (wrkMast.getSourceStaNo() < 1044) { |
| | | devpId = 1; |
| | | } else if (wrkMast.getSourceStaNo() < 1091) { |
| | | devpId = 2; |
| | | } else { |
| | | devpId = 3; |
| | | } |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devpId); |
| | | try { |
| | | StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getSourceStaNo()); |
| | | |
| | | if (staProtocol == null) { |
| | | wrkMast.setIoTime(new Date()); |
| | | wrkMastService.updateById(wrkMast); |
| | | return; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | // 站点条件判断 |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() == 0 && staProtocol.isPakMk()) { |
| | | // 更新站点信息 且 下发plc命令 |
| | | StaProtocol staProtocolNew = new StaProtocol(); |
| | | staProtocolNew.setSiteId(staProtocol.getSiteId()); |
| | | staProtocolNew.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocolNew.setStaNo(crnOutSiteToRgvSite2.get(wrkMast.getSourceStaNo()) != null ? crnOutSiteToRgvSite2.get(wrkMast.getSourceStaNo()) :wrkMast.getSourceStaNo().shortValue()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devpId, new Task(2, staProtocolNew)); |
| | | log.info("手动站位转移输送线下发:" + staProtocolNew.getWorkNo() + "," + staProtocolNew.getSiteId() + "->" + staProtocolNew.getStaNo()); |
| | | if (!result) { |
| | | News.errorNoLog("" + " - 1" + " - 更新plc站点信息失败"); |
| | | throw new CoolException("更新plc站点信息失败"); |
| | | } |
| | | |
| | | wrkMast.setIoTime(new Date()); |
| | | wrkMast.setWrkSts(52L); |
| | | wrkMastService.updateById(wrkMast); |
| | | } else { |
| | | wrkMast.setIoTime(new Date()); |
| | | wrkMastService.updateById(wrkMast); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |