| | |
| | | @Value("${wms.url}") |
| | | private String wmsUrl; |
| | | |
| | | private Short getWorkMode(Integer bay) { |
| | | if (bay == 2 || bay == 7) { |
| | | private Short getWorkMode(Short locType1, Integer bay) { |
| | | if (locType1 == 2) { |
| | | return (short) 3; |
| | | } else if (bay == 3) { |
| | | return (short) 2; |
| | | } else if (bay == 4) { |
| | | return (short) 2; |
| | | } else if (bay == 5) { |
| | | return (short) 1; |
| | | } else if (locType1 == 5) { |
| | | return (short) 3; |
| | | } else { |
| | | return (short) 0; |
| | | if (bay == 5) { |
| | | return (short) 1; |
| | | } else { |
| | | return (short) 2; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | // 判断重复工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode); |
| | | //过滤判断,防止拣料再入库货物,经过入库站再入库时,被退回到退库站 |
| | | WrkMast wrkMast1 = wrkMastMapper.selectPakInStepBarcode(barcode); |
| | | if (wrkMast1 != null) { |
| | | if (wrkMast1.getIoType() == 103 || wrkMast1.getIoType() == 107 || wrkMast1.getIoType() == 104) { |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStepBarcode(barcode); |
| | | if (wrkMast != null && wrkMast.getWrkSts() == 2) { |
| | | int wrkNo1 = basDevpService.count(new QueryWrapper<BasDevp>().eq("wrk_no", wrkMast.getWrkNo())); |
| | | if (wrkNo1 != 0) { |
| | | News.error(barcode + "条码已存在状态为( 2.设备上走 )的数据,请查看WCS输送线界面,工作号={}", wrkMast.getWrkNo()); |
| | | if (ledThread != null) { |
| | | News.error(":扫码失败,请重试"); |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, barcode + "条码已存在状态为( 2.设备上走 )的任务,工作号=" + wrkMast.getWrkNo())); |
| | | } |
| | | continue; |
| | | } |
| | | } |
| | | if (wrkMast != null) { |
| | | News.error("" + mark + " - 4" + " - 工作档中已存在该站状态为( 2.设备上走 )的数据,工作号={}", wrkMast.getWrkNo()); |
| | | staProtocol.setWorkNo((short) 9999); |
| | | staProtocol.setStaNo(inSta.getBackSta().shortValue()); |
| | | barcodeThread.setBarcode(""); |
| | | staProtocol.setWorkNo(Short.parseShort(wrkMast.getWrkNo() + "")); |
| | | staProtocol.setStaNo(Short.parseShort(wrkMast.getStaNo() + "")); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | log.info("输送线下发(存在设备上走的工作档,直接下发!)):" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo()); |
| | | |
| | | ledThread.errorReset(); |
| | | log.info("组托请求后LED错误清除"); |
| | | |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败"); |
| | | News.error(":更新plc站点信息失败"); |
| | | log.error("输送线下发(存在设备上走的工作档,直接下发!)==>更新plc站点信息失败"); |
| | | // throw new CoolException("更新plc站点信息失败"); |
| | | continue; |
| | | } |
| | | |
| | | // led 异常显示 |
| | | if (ledThread != null) { |
| | | String errorMsg = "工作档已存在该条码号===>>" + barcode; |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg)); |
| | | } |
| | | } |
| | | WrkMast checkPick = wrkMastMapper.selectOne(new QueryWrapper<WrkMast>() |
| | | .eq("barcode", barcode) |
| | | .in("io_type", 107, 103, 57)); |
| | | if (!Cools.isEmpty(checkPick)) { |
| | | continue; |
| | | } |
| | | |
| | |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) { |
| | | News.warnNoLog("" + mark + " - 0" + " - 开始执行"); |
| | | WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode); |
| | | // WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue()); |
| | | // WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue()); |
| | | if (wrkMast == null) { |
| | | // 无拣料数据 |
| | | continue; |
| | | WrkMast wrkMast1 = wrkMastMapper.selectPakInStepBarcode(barcode); |
| | | if (!(wrkMast1 != null && wrkMast1.getWrkSts() == 2 && wrkMast1.getIoType() == 53)) { |
| | | // 无拣料数据 |
| | | continue; |
| | | } else { |
| | | wrkMast1.setIoType(103); |
| | | wrkMast = wrkMast1; |
| | | } |
| | | } |
| | | if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { |
| | | continue; |
| | |
| | | // log.error("{}号任务数据异常!", wrkMast.getWrkNo()); |
| | | // } |
| | | // 获取目标站 |
| | | |
| | | Wrapper<StaDesc> wrapper = new QueryWrapper<StaDesc>().eq("type_no", wrkMast.getIoType() - 50).eq("stn_no", pickSta.getStaNo()) // 作业站点 = 拣料出库的目标站 |
| | | .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号 |
| | | StaDesc staDesc = staDescService.getOne(wrapper); |
| | |
| | | crnThread.setResetFlag(true); |
| | | } else if (statusTypeTwo == CrnStatusType.WAITING_TWO) { |
| | | crnThread.setResetFlagTwo(true); |
| | | } else { |
| | | } else if (statusTypeTwo == CrnStatusType.WAITING_All) { |
| | | crnThread.setResetFlag(true); |
| | | crnThread.setResetFlagTwo(true); |
| | | } |
| | |
| | | flag = true; |
| | | } |
| | | if (!flag) { |
| | | //TODO |
| | | News.error("" + mark + " - 1" + " - 3" + " - 堆垛机入库站信息(以下需要全true):" + "自动信号" + staProtocol.isAutoing() + "有物信号" + staProtocol.isLoading() + "工作号>0" + staProtocol.getWorkNo() + "可入信号" + staProtocol.isInEnable() + "能入信号(wms设置).equals(\"Y\")" + staDetl.getCanining()); |
| | | News.errorNoLog("" + mark + " - 1" + " - 3" + " - 堆垛机入库站信息(以下需要全true):" + "自动信号" + staProtocol.isAutoing() + "有物信号" + staProtocol.isLoading() + "工作号>0" + staProtocol.getWorkNo() + "可入信号" + staProtocol.isInEnable() + "能入信号(wms设置).equals(\"Y\")" + staDetl.getCanining()); |
| | | continue; |
| | | } |
| | | // 获取工作状态为2(设备上走)的入库工作档 |
| | |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 |
| | | Short workMode = getWorkMode(locMast.getBay1()); |
| | | Short workMode = getWorkMode(locMast.getLocType1(), locMast.getBay1()); |
| | | if (workMode == 2) { |
| | | //CrnTaskModeType该枚举类无效,只有1代表工位,2代表工位2,3双工位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.PAKOUT); |
| | |
| | | News.warnNoLog("" + mark + " - 2" + " - 12" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue(), sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue(), crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue()); |
| | | |
| | | String locNo = sourceSta.getLocNo(); |
| | | |
| | | // 获取目标库位信息 |
| | | LocMast sta = locMastService.getById(sourceSta.getLocNo()); |
| | | // 1.堆垛机开始移动 |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 |
| | | Short workMode = getWorkMode(sourceSta.getBay1()); |
| | | Short workMode = getWorkMode(sta.getLocType1(), sourceSta.getBay1()); |
| | | if (workMode == 2) { |
| | | //CrnTaskModeType该枚举类无效,只有1代表工位,2代表工位2,3双工位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.PAKOUT); |
| | |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 |
| | | Short workMode = getWorkMode(sourceSta.getBay1()); |
| | | Short workMode = getWorkMode(sta.getLocType1(), sourceSta.getBay1()); |
| | | crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | if (workMode == 2) { |
| | | //CrnTaskModeType该枚举类无效,只有1代表工位,2代表工位2,3双工位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.PAKOUT); |
| | | crnCommand.setSourcePosXTwo(sourceSta.getRow1().shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosYTwo(sourceSta.getBay1().shortValue()); // 源库位列 |
| | | crnCommand.setSourcePosZTwo(sourceSta.getLev1().shortValue()); // 源库位层 |
| | |
| | | // 状态:等待确认 并且 任务完成位 = 1 |
| | | if (wait && crnProtocol.getTaskNo() != 0) { |
| | | News.warnNoLog("" + mark + " - 0" + " - 开始执行对工作档的完成操作"); |
| | | if (crnProtocol.getTaskNo() == 9999) { |
| | | // if (crnProtocol.getTaskNo() == 9999) { |
| | | // // 堆垛机复位 |
| | | // if (statusType == CrnStatusType.WAITING_ONE) { |
| | | // crnThread.setResetFlag(true); |
| | | // } else if (statusTypeTwo == CrnStatusType.WAITING_TWO) { |
| | | // crnThread.setResetFlagTwo(true); |
| | | // } else { |
| | | // crnThread.setResetFlag(true); |
| | | // crnThread.setResetFlagTwo(true); |
| | | // } |
| | | // } else { |
| | | // 获取入库待确认工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue()); |
| | | if (wrkMast == null) { |
| | | News.error("" + mark + " - 1" + " - 堆垛机处于等待确认且任务完成状态,但未找到工作档。堆垛机号={},工作号={}", crn.getId(), crnProtocol.getTaskNo()); |
| | | continue; |
| | | } |
| | | // 入库 + 库位转移 ==> 4.入库完成 |
| | | if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) { |
| | | wrkMast.setWrkSts(4L); |
| | | } else { |
| | | //TODO |
| | | News.info("状态不对,状态={},工作号={}", wrkMast.getWrkSts(), crnProtocol.getTaskNo()); |
| | | continue; |
| | | } |
| | | Date now = new Date(); |
| | | wrkMast.setCrnEndTime(now); |
| | | wrkMast.setModiTime(now); |
| | | // 修改成功后复位堆垛机 |
| | | if (wrkMastMapper.updateById(wrkMast) > 0) { |
| | | // 堆垛机复位 |
| | | News.info("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号={}", crnThread.getCrnProtocol().getCrnNo()); |
| | | if (statusType == CrnStatusType.WAITING_ONE) { |
| | | crnThread.setResetFlag(true); |
| | | } else if (statusTypeTwo == CrnStatusType.WAITING_TWO) { |
| | |
| | | crnThread.setResetFlagTwo(true); |
| | | } |
| | | } else { |
| | | // 获取入库待确认工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue()); |
| | | if (wrkMast == null) { |
| | | News.error("" + mark + " - 1" + " - 堆垛机处于等待确认且任务完成状态,但未找到工作档。堆垛机号={},工作号={}", crn.getId(), crnProtocol.getTaskNo()); |
| | | continue; |
| | | } |
| | | // 入库 + 库位转移 ==> 4.入库完成 |
| | | if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) { |
| | | wrkMast.setWrkSts(4L); |
| | | } else { |
| | | continue; |
| | | } |
| | | Date now = new Date(); |
| | | wrkMast.setCrnEndTime(now); |
| | | wrkMast.setModiTime(now); |
| | | // 修改成功后复位堆垛机 |
| | | if (wrkMastMapper.updateById(wrkMast) > 0) { |
| | | // 堆垛机复位 |
| | | News.info("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号={}", crnThread.getCrnProtocol().getCrnNo()); |
| | | if (statusType == CrnStatusType.WAITING_ONE) { |
| | | crnThread.setResetFlag(true); |
| | | } else if (statusTypeTwo == CrnStatusType.WAITING_TWO) { |
| | | crnThread.setResetFlagTwo(true); |
| | | } else { |
| | | crnThread.setResetFlag(true); |
| | | crnThread.setResetFlagTwo(true); |
| | | } |
| | | } else { |
| | | News.error("" + mark + " - 2" + " - 修改成功后复位堆垛机 失败!!,堆垛机号={}", crnThread.getCrnProtocol().getCrnNo()); |
| | | } |
| | | News.error("" + mark + " - 2" + " - 修改成功后复位堆垛机 失败!!,堆垛机号={}", crnThread.getCrnProtocol().getCrnNo()); |
| | | } |
| | | |
| | | } |
| | | |
| | | //} |
| | | } |
| | | News.infoNoLog("" + mark + " - 0" + " - 对工作档的完成操作执行完成"); |
| | | } |
| | |
| | | LocMast loc = null; |
| | | for (Integer row : rows) { |
| | | if (Utils.isDeepLoc(slaveProperties, row)) { |
| | | loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1(), shallowLoc.getLocType2()); |
| | | loc = locMastService.queryFreeLocMast(row, shallowLoc.getBay1(), shallowLoc.getLocType1(), shallowLoc.getLocType2()); |
| | | if (loc != null) { |
| | | if (Utils.isDeepLoc(slaveProperties, loc.getLocNo())) { |
| | | String shallowLocNo = Utils.getShallowLoc(slaveProperties, loc.getLocNo()); |
| | |
| | | } |
| | | if (null != loc) { |
| | | //调整的原因:双工位的情况,5列,只能2号工位取放,34列,只能工位1取放 |
| | | if (shallowLoc.getLocType1() == 1) { |
| | | if (shallowLoc.getBay1() == 5 && loc.getBay1() == 5) { |
| | | break; |
| | | } else if (shallowLoc.getBay1() == 3 || shallowLoc.getBay1() == 4) { |
| | | if (loc.getBay1() == 3 || loc.getBay1() == 4) { |
| | | break; |
| | | } |
| | | } |
| | | loc = null; |
| | | } else { |
| | | break; |
| | | } |
| | | // if (shallowLoc.getLocType1() == 1) { |
| | | // if (shallowLoc.getBay1() == 5 && loc.getBay1() == 5) { |
| | | // break; |
| | | // } else if (shallowLoc.getBay1() == 3 || shallowLoc.getBay1() == 4) { |
| | | // if (loc.getBay1() == 3 || loc.getBay1() == 4) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // loc = null; |
| | | // } else { |
| | | break; |
| | | // } |
| | | } |
| | | } |
| | | } |
| | | if (null == loc) { |
| | | for (Integer row : rows) { |
| | | if (Utils.isShallowLoc(slaveProperties, row)) { |
| | | loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1(), shallowLoc.getLocType2()); |
| | | loc = locMastService.queryFreeLocMast(row, shallowLoc.getBay1(), shallowLoc.getLocType1(), shallowLoc.getLocType2()); |
| | | |
| | | if (null != loc) {//对应深库位非在库状态,不能移库 |
| | | String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo()); |
| | |
| | | } |
| | | |
| | | if (null != loc) { |
| | | //调整的原因:双工位的情况,5列,只能2号工位取放,34列,只能工位1取放 |
| | | if (shallowLoc.getLocType1() == 1) { |
| | | if (shallowLoc.getBay1() == 5 && loc.getBay1() == 5) { |
| | | break; |
| | | } else if (shallowLoc.getBay1() == 3 || shallowLoc.getBay1() == 4) { |
| | | if (loc.getBay1() == 3 || loc.getBay1() == 4) { |
| | | break; |
| | | } |
| | | } |
| | | loc = null; |
| | | } else { |
| | | break; |
| | | } |
| | | // //调整的原因:双工位的情况,5列,只能2号工位取放,34列,只能工位1取放 |
| | | // if (shallowLoc.getLocType1() == 1) { |
| | | // if (shallowLoc.getBay1() == 5 && loc.getBay1() == 5) { |
| | | // break; |
| | | // } else if (shallowLoc.getBay1() == 3 || shallowLoc.getBay1() == 4) { |
| | | // if (loc.getBay1() == 3 || loc.getBay1() == 4) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // loc = null; |
| | | // } else { |
| | | break; |
| | | // } |
| | | } |
| | | } |
| | | } |