| | |
| | | @Value("${wms.url}") |
| | | private String wmsUrl; |
| | | |
| | | private Short getWorkMode(Integer bay) { |
| | | if (bay == 2 || bay == 7) { |
| | | return (short) 3; |
| | | } else if (bay == 3) { |
| | | return (short) 1; |
| | | } else if (bay == 4) { |
| | | return (short) 2; |
| | | } else if (bay == 5) { |
| | | return (short) 1; |
| | | } else { |
| | | return (short) 0; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 组托 |
| | | * 入库站,根据条码扫描生成入库工作档,工作状态 2 |
| | |
| | | for (DevpSlave.Sta inSta : devp.getInSta()) { |
| | | // 获取条码扫描仪信息 |
| | | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); |
| | | if (barcodeThread == null) { |
| | | continue; |
| | | } |
| | | // 获取入库站信息 |
| | | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); |
| | | if (staProtocol == null) { |
| | |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | if (barcodeThread == null) { |
| | | continue; |
| | | } |
| | | String barcode = barcodeThread.getBarcode(); |
| | | // 尺寸检测异常 |
| | | boolean back = false; |
| | | String errMsg = ""; |
| | | if (staProtocol.isFrontErr()) { |
| | | errMsg = "前超限"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isBackErr()) { |
| | | errMsg = "后超限"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isHighErr()) { |
| | | errMsg = "高超限"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isLeftErr()) { |
| | | errMsg = "左超限"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isRightErr()) { |
| | | errMsg = "右超限"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isWeightErr()) { |
| | | errMsg = "超重"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isBarcodeErr()) { |
| | | errMsg = "扫码失败"; |
| | | back = true; |
| | | } |
| | | |
| | | // 退回 |
| | | if (back) { |
| | | log.info("errmsg: " + errMsg); |
| | | // News.warn("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg); |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg)); |
| | | if (!staProtocol.isLoading()) { |
| | | continue; |
| | | } |
| | | if (!staProtocol.isPakMk()) { |
| | | continue; |
| | | } |
| | | staProtocol.setWorkNo((short) 9999); |
| | | News.info("{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg, (short) 9999); |
| | | staProtocol.setStaNo(inSta.getBackSta().shortValue()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | log.error("输送线下发1:" + 9999 + "," + inSta.getBackSta()); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | //LED |
| | | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); |
| | | //LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); |
| | | // 入出库模式判断 |
| | | // if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; } |
| | | // if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) { |
| | |
| | | } |
| | | String barcode11 = barcodeThread.getBarcode(); |
| | | if (Cools.isEmpty(barcode11)) { |
| | | System.out.println("0000"); |
| | | if (staProtocol.isAutoing() && !staProtocol.isEmptyMk() && staProtocol.getWorkNo() == 9999 && staProtocol.isPakMk() && staProtocol.getStamp() == 2) { |
| | | staProtocol.setStamp(3); |
| | | News.info("" + mark + " - 7" + " - 扫码失败2 ===>> {}号条码扫描器检测条码信息:{},站点:{}", inSta.getBarcode(), barcode11, inSta.getStaNo()); |
| | |
| | | // Thread.sleep(300); |
| | | // }catch (Exception e){} |
| | | |
| | | String barcode = barcodeThread.getBarcode(); |
| | | //String barcode = barcodeThread.getBarcode(); |
| | | if (!Cools.isEmpty(barcode)) { |
| | | News.info("" + mark + " - 1" + " - {}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); |
| | | if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { |
| | |
| | | param.setIoType(1); |
| | | param.setSourceStaNo(inSta.getStaNo()); |
| | | param.setLocType1(locTypeDto.getLocType1()); |
| | | if (inSta.getStaNo() == 102) { |
| | | param.setLocType2((short) 3); |
| | | } else if (inSta.getStaNo() == 211) { |
| | | param.setLocType1((short) 5); |
| | | param.setLocType2((short) 4); |
| | | } else if (inSta.getStaNo() == 201) { |
| | | param.setLocType2((short) 4); |
| | | } |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/rpc/pakin/loc/v1") |
| | |
| | | wrkMast.setCrnEndTime(new Date()); |
| | | if (wrkMastMapper.updateById(wrkMast) != 0) { |
| | | // 复位堆垛机 |
| | | crnThread.setResetFlag(true); |
| | | Short mode = crnProtocol.getMode(); |
| | | if (mode == 1) { |
| | | crnThread.setResetFlag(true); |
| | | } else if (mode == 2) { |
| | | crnThread.setResetFlagTwo(true); |
| | | } else if (mode == 3) { |
| | | crnThread.setResetFlag(true); |
| | | crnThread.setResetFlagTwo(true); |
| | | } |
| | | } else { |
| | | News.error("" + mark + " - 1" + " - 更新工作档的工作状态为14失败!!! [工作号:{}]", wrkMast.getWrkNo()); |
| | | } |
| | |
| | | // if(crnThread.isBackHpFlag()){ |
| | | // continue; |
| | | // } |
| | | |
| | | // 只有当堆垛机空闲 并且 无任务时才继续执行 |
| | | if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO |
| | | && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) { |
| | |
| | | flag = true; |
| | | } |
| | | if (!flag) { |
| | | News.errorNoLog("" + mark + " - 1" + " - 3" + " - 堆垛机入库站信息(以下需要全true):" |
| | | //TODO |
| | | News.error("" + mark + " - 1" + " - 3" + " - 堆垛机入库站信息(以下需要全true):" |
| | | + "自动信号" + staProtocol.isAutoing() + "有物信号" + staProtocol.isLoading() |
| | | + "工作号>0" + staProtocol.getWorkNo() + "可入信号" + staProtocol.isInEnable() |
| | | + "能入信号(wms设置).equals(\"Y\")" + staDetl.getCanining()); |
| | |
| | | // News.infoNoLog(""+mark+" - 1"+" - 7"+" - 堆垛机控制过滤:堆垛机是否空闲={},任务号={}", crnProtocol.getStatusType(),crnProtocol.getTaskNo()); |
| | | continue; |
| | | } |
| | | |
| | | System.out.println("aas"); |
| | | // 已经存在吊车执行任务时,则过滤 |
| | | if (wrkMastMapper.selectWorking(slave.getId()) != null) { |
| | | continue; |
| | |
| | | } |
| | | } |
| | | } |
| | | System.out.println("434323"); |
| | | News.warnNoLog("" + mark + " - 1" + " - 15" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue() |
| | | , crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue() |
| | | , locMast.getRow1().shortValue(), locMast.getBay1().shortValue(), locMast.getLev1().shortValue()); |
| | |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 |
| | | Short workMode = getWorkMode(locMast.getBay1()); |
| | | if (workMode == 2) { |
| | | //CrnTaskModeType该枚举类无效,只有1代表工位,2代表工位2,3双工位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.PAKOUT); |
| | | crnCommand.setSourcePosXTwo(crnStn.getRow().shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosYTwo(crnStn.getBay().shortValue()); // 源库位列 |
| | | crnCommand.setSourcePosZTwo(crnStn.getLev().shortValue()); // 源库位层 |
| | | crnCommand.setDestinationPosXTwo(locMast.getRow1().shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosYTwo(locMast.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZTwo(locMast.getLev1().shortValue()); // 目标库位层 |
| | | } else { |
| | | if (workMode == 1) { |
| | | crnCommand.setTaskMode(CrnTaskModeType.PAKIN); |
| | | } else if (workMode == 3) { |
| | | crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); |
| | | } |
| | | crnCommand.setSourcePosX(crnStn.getRow().shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosY(crnStn.getBay().shortValue()); // 源库位列 |
| | | crnCommand.setSourcePosZ(crnStn.getLev().shortValue()); // 源库位层 |
| | | crnCommand.setDestinationPosX(locMast.getRow1().shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 目标库位层 |
| | | } |
| | | // crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式: 库位移转 |
| | | crnCommand.setSourcePosX(crnStn.getRow().shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosY(crnStn.getBay().shortValue()); // 源库位列 |
| | | crnCommand.setSourcePosZ(crnStn.getLev().shortValue()); // 源库位层 |
| | | crnCommand.setDestinationPosX(locMast.getRow1().shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 目标库位层 |
| | | |
| | | |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { |
| | | News.error("" + mark + " - 1" + " - 16" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | } else { |
| | |
| | | // Thread.sleep(500); |
| | | // }catch(Exception ignore){} |
| | | // } |
| | | |
| | | System.out.println("ererdfd"); |
| | | // 修改工作档状态 2.设备上走 => 3.吊车入库中 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(3L); |
| | |
| | | , sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue() |
| | | , crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue()); |
| | | |
| | | String locNo = sourceSta.getLocNo(); |
| | | |
| | | // 1.堆垛机开始移动 |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 |
| | | // crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式: 库位移转 |
| | | crnCommand.setSourcePosX(sourceSta.getRow1().shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosY(sourceSta.getBay1().shortValue()); // 源库位列 |
| | | crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue()); // 源库位层 |
| | | crnCommand.setDestinationPosX(crnStn.getRow().shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosY(crnStn.getBay().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(crnStn.getLev().shortValue()); // 目标库位层 |
| | | Short workMode = getWorkMode(sourceSta.getBay1()); |
| | | 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()); // 源库位层 |
| | | crnCommand.setDestinationPosXTwo(crnStn.getRow().shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosYTwo(crnStn.getBay().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZTwo(crnStn.getLev().shortValue()); // 目标库位层 |
| | | } else { |
| | | if (workMode == 1) { |
| | | crnCommand.setTaskMode(CrnTaskModeType.PAKIN); |
| | | } else if (workMode == 3) { |
| | | crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); |
| | | } |
| | | crnCommand.setSourcePosX(sourceSta.getRow1().shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosY(sourceSta.getBay1().shortValue()); // 源库位列 |
| | | crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue()); // 源库位层 |
| | | crnCommand.setDestinationPosX(crnStn.getRow().shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosY(crnStn.getBay().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(crnStn.getLev().shortValue()); // 目标库位层 |
| | | } |
| | | |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { |
| | | News.error("" + mark + " - 2" + " - 13" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | } else { |
| | |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 |
| | | Short workMode = getWorkMode(sourceSta.getBay1()); |
| | | crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式: 库位移转 |
| | | crnCommand.setSourcePosX(sourceSta.getRow1().shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosY(sourceSta.getBay1().shortValue()); // 源库位列 |
| | | crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue()); // 源库位层 |
| | | crnCommand.setDestinationPosX(sta.getRow1().shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosY(sta.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(sta.getLev1().shortValue()); // 目标库位层 |
| | | if (workMode == 2) { |
| | | //CrnTaskModeType该枚举类无效,只有1代表工位,2代表工位2,3双工位 |
| | | crnCommand.setSourcePosXTwo(sourceSta.getRow1().shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosYTwo(sourceSta.getBay1().shortValue()); // 源库位列 |
| | | crnCommand.setSourcePosZTwo(sourceSta.getLev1().shortValue()); // 源库位层 |
| | | crnCommand.setDestinationPosXTwo(sta.getRow1().shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosYTwo(sta.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZTwo(sta.getLev1().shortValue()); // 目标库位层 |
| | | } else { |
| | | if (workMode == 1) { |
| | | crnCommand.setTaskMode(CrnTaskModeType.PAKIN); |
| | | } else if (workMode == 3) { |
| | | crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); |
| | | } |
| | | crnCommand.setSourcePosX(sourceSta.getRow1().shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosY(sourceSta.getBay1().shortValue()); // 源库位列 |
| | | crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue()); // 源库位层 |
| | | crnCommand.setDestinationPosX(sta.getRow1().shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosY(sta.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(sta.getLev1().shortValue()); // 目标库位层 |
| | | } |
| | | |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { |
| | | News.error("" + mark + " - 3" + " - 4" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | } else { |
| | |
| | | } |
| | | // 状态:等待确认 并且 任务完成位 = 1 |
| | | if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) { |
| | | News.warnNoLog("" + mark + " - 0" + " - 开始执行对工作档的完成操作"); |
| | | News.warn("" + mark + " - 0" + " - 开始执行对工作档的完成操作"); |
| | | if (crnProtocol.getTaskNo() == 9999) { |
| | | // 堆垛机复位 |
| | | crnThread.setResetFlag(true); |
| | | Short mode = crnProtocol.getMode(); |
| | | if (mode == 1) { |
| | | crnThread.setResetFlag(true); |
| | | } else if (mode == 2) { |
| | | crnThread.setResetFlagTwo(true); |
| | | } else if (mode == 3) { |
| | | crnThread.setResetFlag(true); |
| | | crnThread.setResetFlagTwo(true); |
| | | } |
| | | } else { |
| | | // 获取入库待确认工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue()); |
| | |
| | | if (wrkMastMapper.updateById(wrkMast) > 0) { |
| | | // 堆垛机复位 |
| | | News.warnNoLog("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号={}", crnThread.getCrnProtocol().getCrnNo()); |
| | | crnThread.setResetFlag(true); |
| | | Short mode = crnProtocol.getMode(); |
| | | if (mode == 1) { |
| | | crnThread.setResetFlag(true); |
| | | } else if (mode == 2) { |
| | | crnThread.setResetFlagTwo(true); |
| | | } else if (mode == 3) { |
| | | crnThread.setResetFlag(true); |
| | | crnThread.setResetFlagTwo(true); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | param.setIoType(10); |
| | | param.setSourceStaNo(emptyInSta.getStaNo()); |
| | | param.setLocType1(locTypeDto.getLocType1()); |
| | | if (emptyInSta.getStaNo() == 102) { |
| | | param.setLocType2((short) 3); |
| | | } else if (emptyInSta.getStaNo() == 211) { |
| | | param.setLocType1((short) 5); |
| | | param.setLocType2((short) 4); |
| | | } else if (emptyInSta.getStaNo() == 201) { |
| | | param.setLocType2((short) 4); |
| | | } |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/rpc/pakin/loc/v1") |
| | |
| | | LocMast loc = null; |
| | | for (Integer row : rows) { |
| | | if (Utils.isDeepLoc(slaveProperties, row)) { |
| | | loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1()); |
| | | loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1(), shallowLoc.getLocType2()); |
| | | |
| | | if (loc != null) { |
| | | if (Utils.isDeepLoc(slaveProperties, loc.getLocNo())) { |
| | |
| | | if (null == loc) { |
| | | for (Integer row : rows) { |
| | | if (Utils.isShallowLoc(slaveProperties, row)) { |
| | | loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1()); |
| | | loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1(), shallowLoc.getLocType2()); |
| | | |
| | | if (null != loc) {//对应深库位非在库状态,不能移库 |
| | | String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo()); |