| | |
| | | import com.zy.core.thread.LedThread; |
| | | import com.zy.core.thread.RgvThread; |
| | | import com.zy.core.thread.SiemensDevpThread; |
| | | import com.zy.system.service.ConfigService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | |
| | | private BasRgvMapService basRgvMapService; |
| | | @Autowired |
| | | private BasCrnOptService crnOptService; |
| | | @Autowired |
| | | private ConfigService configService; |
| | | |
| | | @Value("${wms.url}") |
| | | private String wmsUrl; |
| | |
| | | private boolean isToOrigin; |
| | | |
| | | public Integer wrkNo = 10000; |
| | | |
| | | /*堆垛机入出库任务下发控制参数*/ |
| | | // Integer ioControl=configService.selectCrnIo(Integer mark); |
| | | |
| | | /** |
| | | * 组托 |
| | |
| | | // 尺寸检测异常 |
| | | boolean back = false; |
| | | String errMsg = ""; |
| | | Integer outCount=wrkMastService.selectOutCount(); |
| | | if (staProtocol.isFrontErr()) { |
| | | errMsg = "前超限"; |
| | | back = true; |
| | |
| | | errMsg = "右超限"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.getWeight() > 1000) { |
| | | errMsg = "超重或未读取"; |
| | | if (!back && staProtocol.isWeightErr()) { |
| | | errMsg = "超重"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isBarcodeErr()) { |
| | | errMsg = "扫码失败"; |
| | | back = true; |
| | | } |
| | | // if(staProtocol.getWeight() <= 0 ){ |
| | | // continue; |
| | | // } |
| | | // if (!back && staProtocol.getWeight() == 0.0) { |
| | | // errMsg = "重量获取失败"; |
| | | // back = true; |
| | | // } |
| | | |
| | | // News.info("{}重量", staProtocol.getWeight()); |
| | | if (!back && outCount > 0) { |
| | | 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()) { |
| | |
| | | if (!staProtocol.isPakMk()) { |
| | | continue; |
| | | } |
| | | staProtocol.setWorkNo(wrkNo); |
| | | staProtocol.setWorkNo(wrkNo);//退回 工作号:10000 |
| | | News.info("{}PLC入库回退:{},任务号:{}", inSta.getStaNo(), errMsg, wrkNo); |
| | | wrkNo++; |
| | | staProtocol.setStaNo(inSta.getBackSta().shortValue()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | log.error("输送线下发1:" + wrkNo + "," + inSta.getBackSta()); |
| | | log.error("输送线下发(超限全板退回):" + wrkNo + "," + inSta.getBackSta()); |
| | | break;//超限托盘退回不生成工作档 |
| | | } |
| | | |
| | | // 判断是否满足入库条件 |
| | |
| | | |
| | | staProtocol.setWorkNo(wrkNo); |
| | | News.info("{}barcode入库回退:{},任务号:{}", inSta.getStaNo(), errMsg, wrkNo); |
| | | wrkNo++; |
| | | staProtocol.setStaNo(inSta.getBackSta().shortValue()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | log.error("输送线下发1:" + wrkNo + "," + inSta.getBackSta()); |
| | | log.error("输送线下发(扫码全板退回):" + wrkNo + "," + inSta.getBackSta()); |
| | | continue; |
| | | } |
| | | // 判断重复工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode); |
| | | if (wrkMast != null) { |
| | | // int wrkNo1 = basDevpService.selectCount(new EntityWrapper<BasDevp>().eq("wrk_no", wrkMast.getWrkNo())); |
| | | // if (wrkNo1 != 0){ |
| | | // if (ledThread != null) { |
| | | // News.error(methodName + ":扫码失败,请重试"); |
| | | // } |
| | | // |
| | | // } |
| | | News.error(barcode + "条码已存在状态为( 2.设备上走 )的数据,请查看WCS输送线界面,工作号={}", wrkMast.getWrkNo()); |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, barcode + "条码已存在状态为( 2.设备上走 )的任务,工作号=" + wrkMast.getWrkNo())); |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败"); |
| | | } |
| | | continue; |
| | | // barcodeThread.setBarcode(""); |
| | | // staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | // staProtocol.setStaNo(RouteUtils.SouStaEnd(null,wrkMast.getSourceStaNo())); |
| | | // 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) { |
| | | // News.error(methodName + ":更新plc站点信息失败"); |
| | | // log.error("输送线下发(存在设备上走的工作档,直接下发!)==>更新plc站点信息失败"); |
| | | // |
| | | //// throw new CoolException("更新plc站点信息失败"); |
| | | // continue; |
| | | // } |
| | | |
| | | } |
| | | WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>() |
| | | .eq("barcode", barcode) |
| | |
| | | staProtocol.setStaNo(dto.getStaNo().shortValue()); |
| | | 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.error("输送线下发(全板):" + dto.getWorkNo() + "," + dto.getStaNo()); |
| | | |
| | | ledThread.errorReset(); |
| | | log.error("组托请求后LED错误清除"); |
| | |
| | | } |
| | | } else { |
| | | if (jsonObject.getString("msg").equals("工作档已存在")) { |
| | | |
| | | //工作档已存在 再次进去 |
| | | // wrkMast = wrkMastMapper.selectPakInStepBarcode(barcode); |
| | | // if (wrkMast != null) { |
| | | // barcodeThread.setBarcode(""); |
| | | // staProtocol.setWorkNo(9999); |
| | | // //staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | // //staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo())); |
| | | // staProtocol.setStaNo(inSta.getBackSta().shortValue()); |
| | | // devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | // boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | // log.error("输送线下发2:" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo()); |
| | | // ledThread.errorReset(); |
| | | // log.error("组托请求后LED错误清除"); |
| | | // if (!result) { |
| | | // News.error(methodName + ":更新plc站点信息失败"); |
| | | // |
| | | // throw new CoolException("更新plc站点信息失败"); |
| | | // } |
| | | // } |
| | | |
| | | continue; |
| | | } |
| | | staProtocol.setWorkNo(wrkNo); |
| | | wrkNo++; |
| | | staProtocol.setStaNo(inSta.getBackSta().shortValue()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | log.error("输送线下发2:" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo()); |
| | | log.error("输送线下发(全板退回):" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo()); |
| | | |
| | | // if (ledThread != null) { |
| | | String errorMsg = jsonObject.getString("msg"); |
| | | if (!Cools.isEmpty(errorMsg)) { |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); |
| | | } |
| | | // } |
| | | // News.error(methodName + ":请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response); |
| | | News.error(methodName + ":请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | } |
| | | } |
| | | // News.infoNoLog(""+mark+" - 0"+" - 组托 ===》执行完成"); |
| | | News.infoNoLog(""+mark+" - 0"+" - 组托 ===》执行完成"); |
| | | |
| | | } |
| | | |
| | |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | // // 入出库模式判断 |
| | | // 入出库模式判断 |
| | | if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { |
| | | continue; |
| | | } |
| | |
| | | // 遍历拣料入库口 |
| | | for (DevpSlave.Sta pickSta : devp.getPickSta()) { |
| | | // 获取条码扫描仪信息 |
| | | // BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); |
| | | // if (barcodeThread == null) { |
| | | // continue; |
| | | // } |
| | | // String barcode = barcodeThread.getBarcode(); |
| | | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); |
| | | if (barcodeThread == null) { |
| | | continue; |
| | | } |
| | | String barcode = barcodeThread.getBarcode(); |
| | | // 获取拣料入库站信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | |
| | |
| | | continue; |
| | | } |
| | | // 尺寸检测异常 |
| | | // boolean back = false; |
| | | // String errMsg = ""; |
| | | // if (!back && 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(staProtocol.getSiteId() > 400){ |
| | | // back = false; |
| | | // } |
| | | boolean back = false; |
| | | String errMsg = ""; |
| | | if (!back && 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, pickSta.getLed(), new Task(5, errMsg)); |
| | | // if (!staProtocol.isLoading()) { |
| | | // continue; |
| | | // } |
| | | // if (!staProtocol.isPakMk()) { |
| | | // continue; |
| | | // } |
| | | // staProtocol.setWorkNo(wrkNo); |
| | | // News.info("{}入库回退:{},任务号:{}", pickSta.getStaNo(), errMsg, wrkNo); |
| | | // wrkNo++; |
| | | // staProtocol.setStaNo(pickSta.getBackSta().shortValue()); |
| | | // devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | // MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | // log.error("输送线下发1:" + 9999 + "," + pickSta.getBackSta()); |
| | | // LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed()); |
| | | // |
| | | // // led 异常显示 |
| | | // if (ledThread != null) { |
| | | // MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(5, errMsg)); |
| | | // } |
| | | // continue; |
| | | // } |
| | | if (back) { |
| | | log.info("errmsg: " + errMsg); |
| | | News.warn("扫码入库失败,{}入库站因{}异常,托盘已被退回", pickSta.getStaNo(), errMsg); |
| | | MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(5, errMsg)); |
| | | if (!staProtocol.isLoading()) { |
| | | continue; |
| | | } |
| | | if (!staProtocol.isPakMk()) { |
| | | continue; |
| | | } |
| | | staProtocol.setWorkNo(wrkNo); |
| | | News.info("{}入库回退:{},任务号:{}", pickSta.getStaNo(), errMsg, wrkNo); |
| | | staProtocol.setStaNo(pickSta.getBackSta().shortValue()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed()); |
| | | |
| | | // led 异常显示 |
| | | if (ledThread != null) { |
| | | MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(5, errMsg)); |
| | | } |
| | | continue; |
| | | } |
| | | // if(staProtocol.getSiteId() < 400){ |
| | | // if (!Cools.isEmpty(barcode)) { |
| | | // News.infoNoLog("" + mark + " - 1" + " - {}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode); |
| | |
| | | // |
| | | // |
| | | // if (!Cools.isEmpty(barcode)) { |
| | | //// News.info(""+mark+" - 1"+" - {}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode); |
| | | // News.info(""+mark+" - 1"+" - {}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode); |
| | | // if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) { |
| | | // continue; |
| | | // } |
| | |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | // // 入出库模式判断 |
| | | // 入出库模式判断 |
| | | // if (devpThread.ioMode != IoModeType.PAKIN_MODE) { 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()); |
| | | // if(staProtocol.getSiteId() > 400){ |
| | | // wrkMast = wrkMastMapper.selectPickStep3(staProtocol.getWorkNo()); |
| | | // } |
| | | WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode); |
| | | // WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue()); |
| | | if (wrkMast == null) { |
| | | // 无拣料数据 |
| | |
| | | || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { |
| | | 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) |
| | |
| | | .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号 |
| | | StaDesc staDesc = staDescService.selectOne(wrapper); |
| | | if (Cools.isEmpty(staDesc)) { |
| | | // News.error("" + mark + " - 2" + " - 入库路径不存在!type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo()); |
| | | // staProtocol.setWorkNo(wrkNo++); |
| | | // staProtocol.setStaNo((short) (pickSta.getStaNo().shortValue() - (short) 1)); |
| | | // devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | // MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | // log.error("输送线下发4:" + 9989 + "," + (pickSta.getStaNo().shortValue() - (short) 1)); |
| | | News.error("" + mark + " - 2" + " - 入库路径不存在!type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo()); |
| | | staProtocol.setWorkNo(wrkNo); |
| | | staProtocol.setStaNo(pickSta.getBackSta().shortValue()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | log.error("输送线下发(盘点、拣料、并板退回):" + wrkNo + "," + pickSta.getBackSta()); |
| | | //LED |
| | | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed()); |
| | | // led 异常显示 |
| | |
| | | |
| | | // 更新站点信息 且 下发plc命令 |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | // if(staProtocol.getSiteId() < 400){ |
| | | staProtocol.setStaNo(Short.valueOf(wrkMast.getStaNo().toString())); |
| | | // } |
| | | staProtocol.setStaNo(Short.valueOf(wrkMast.getStaNo().toString())); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | log.error("输送线下发5:" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo()); |
| | | log.error("输送线下发(盘点、拣料、并板):" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo()); |
| | | if (!result) { |
| | | News.error("" + mark + " - 3" + " - 发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); |
| | | } |
| | |
| | | */ |
| | | public synchronized void crnIoExecute(Integer mark) { |
| | | |
| | | /*堆垛机入出库任务下发控制参数*/ |
| | | Integer ioControl=configService.selectCrnIo(); |
| | | |
| | | for (CrnSlave crn : slaveProperties.getCrn()) { |
| | | // 获取堆垛机信息 |
| | | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); |
| | |
| | | && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) { |
| | | News.warnNoLog("" + mark + " - 0" + " - 开始执行堆垛机入出库作业下发"); |
| | | // 如果最近一次是入库模式 |
| | | if (crnProtocol.getLastIo().equals("I")) { |
| | | if (basCrnp.getInEnable().equals("Y")) { |
| | | // if (crnProtocol.getLastIo().equals("I")) { |
| | | // if (basCrnp.getInEnable().equals("Y")) { |
| | | // //mark - 1 - .... |
| | | // this.crnStnToLoc(crn, crnProtocol, mark); // 入库 |
| | | // crnProtocol.setLastIo("O"); |
| | | // } else if (basCrnp.getOutEnable().equals("Y")) { |
| | | // //mark - 2 - .... |
| | | // this.locToCrnStn(crn, crnProtocol, mark); // 出库 |
| | | // crnProtocol.setLastIo("I"); |
| | | // } |
| | | // } |
| | | // 如果最近一次是出库模式 |
| | | // else if (crnProtocol.getLastIo().equals("O")) { |
| | | // if (basCrnp.getOutEnable().equals("Y")) { |
| | | // this.locToCrnStn(crn, crnProtocol, mark); // 出库 |
| | | // crnProtocol.setLastIo("I"); |
| | | // } else if (basCrnp.getInEnable().equals("Y")) { |
| | | // this.crnStnToLoc(crn, crnProtocol, mark); // 入库 |
| | | // crnProtocol.setLastIo("O"); |
| | | // } |
| | | // } |
| | | if (ioControl==1){ |
| | | //入库优先 先执行入库再执行出库 |
| | | Integer inCount=wrkMastService.selectIn(); |
| | | if (inCount == 0 && basCrnp.getOutEnable().equals("Y")){ |
| | | this.locToCrnStn(crn, crnProtocol, mark); // 出库 |
| | | } |
| | | if (basCrnp.getInEnable().equals("Y")){ |
| | | this.crnStnToLoc(crn, crnProtocol, mark); // 入库 |
| | | } |
| | | }else if (ioControl==2){ |
| | | //出库优先 先执行出库再执行入库 |
| | | Integer outCount=wrkMastService.selectOut(); |
| | | if (outCount==0 && basCrnp.getInEnable().equals("Y")){ |
| | | this.crnStnToLoc(crn, crnProtocol, mark); // 入库 |
| | | } |
| | | if (basCrnp.getOutEnable().equals("Y")){ |
| | | this.locToCrnStn(crn, crnProtocol, mark); // 出库 |
| | | } |
| | | }else if(ioControl==3){ |
| | | //入出库交替执行 不做限制 |
| | | // 如果最近一次是入库模式 |
| | | if (crnProtocol.getLastIo().equals("I")) { |
| | | if (basCrnp.getInEnable().equals("Y")) { |
| | | //mark - 1 - .... |
| | | this.crnStnToLoc(crn, crnProtocol, mark); // 入库 |
| | | crnProtocol.setLastIo("O"); |
| | | } else if (basCrnp.getOutEnable().equals("Y")) { |
| | | } else if (basCrnp.getOutEnable().equals("Y")) { |
| | | //mark - 2 - .... |
| | | this.locToCrnStn(crn, crnProtocol, mark); // 出库 |
| | | crnProtocol.setLastIo("I"); |
| | | } |
| | | } |
| | | } |
| | | // 如果最近一次是出库模式 |
| | | else if (crnProtocol.getLastIo().equals("O")) { |
| | | if (basCrnp.getOutEnable().equals("Y")) { |
| | | // 如果最近一次是出库模式 |
| | | else if (crnProtocol.getLastIo().equals("O")) { |
| | | if (basCrnp.getOutEnable().equals("Y")) { |
| | | this.locToCrnStn(crn, crnProtocol, mark); // 出库 |
| | | crnProtocol.setLastIo("I"); |
| | | } else if (basCrnp.getInEnable().equals("Y")) { |
| | | } else if (basCrnp.getInEnable().equals("Y")) { |
| | | this.crnStnToLoc(crn, crnProtocol, mark); // 入库 |
| | | crnProtocol.setLastIo("O"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | // this.crnRebackHp(crnProtocol, crnThread); |
| | | |
| | | } |
| | | // News.infoNoLog(""+mark+" - 0"+" - 堆垛机入出库作业下发执行完成"); |
| | | News.infoNoLog(""+mark+" - 0"+" - 堆垛机入出库作业下发执行完成"); |
| | | } |
| | | |
| | | /** |
| | |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | StaProtocol staProtocol1 = devpThread.getStation().get(crnStn.getStaNo() - 1); |
| | | if (staProtocol1 == null) { |
| | | News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol); |
| | | break; |
| | | } else { |
| | | staProtocol1 = staProtocol1.clone(); |
| | | } |
| | | StaProtocol staProtocol2 = devpThread.getStation().get(crnStn.getStaNo() - 2); |
| | | if (staProtocol2 == null) { |
| | | News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol); |
| | | break; |
| | | } else { |
| | | staProtocol2 = staProtocol2.clone(); |
| | | } |
| | | // StaProtocol staProtocol1 = staProtocol.getSiteId()==101?devpThread.getStation().get(crnStn.getStaNo() + 1):devpThread.getStation().get(crnStn.getStaNo() - 1); |
| | | // StaProtocol staProtocol1 = devpThread.getStation().get(crnStn.getStaNo() - 1); |
| | | // StaProtocol staProtocol1 = devpThread.getStation().get(crnStn.getStaNo() + 1); |
| | | // if (staProtocol1 == null) { |
| | | // News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol); |
| | | // break; |
| | | // } else { |
| | | // staProtocol1 = staProtocol1.clone(); |
| | | // } |
| | | // StaProtocol staProtocol2 = staProtocol.getSiteId()==101?devpThread.getStation().get(crnStn.getStaNo() + 2):devpThread.getStation().get(crnStn.getStaNo()); |
| | | // StaProtocol staProtocol2 = devpThread.getStation().get(crnStn.getStaNo() - 2); |
| | | // StaProtocol staProtocol2 = devpThread.getStation().get(crnStn.getStaNo() + 2); |
| | | // if (staProtocol2 == null) { |
| | | // News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol); |
| | | // break; |
| | | // } else { |
| | | // staProtocol2 = staProtocol2.clone(); |
| | | // } |
| | | //出入口输送线只允许存在一个托盘 |
| | | if(staProtocol.isLoading() || staProtocol1.isLoading() || staProtocol2.isLoading() ) { |
| | | break; |
| | | } |
| | | // if(staProtocol.isLoading() || staProtocol1.isLoading() || staProtocol2.isLoading() || staProtocol.getWorkNo() != 0 || staProtocol1.getWorkNo() != 0 || staProtocol2.getWorkNo() != 0) { |
| | | // break; |
| | | // } |
| | | |
| | | // // 入出库模式判断 |
| | | // if (devpThread.ioMode != IoModeType.PAKOUT_MODE) { continue; } |
| | |
| | | // 状态:等待确认 并且 任务完成位 = 1 |
| | | if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) { |
| | | News.warnNoLog("" + mark + " - 0" + " - 开始执行对工作档的完成操作,任务号:" + crnProtocol.getTaskNo()); |
| | | |
| | | if (crnProtocol.getTaskNo() == 9999){ |
| | | crnThread.setResetFlag(true); |
| | | continue; |
| | | } |
| | | // 获取入库待确认工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue()); |
| | | if (wrkMast == null) { |
| | |
| | | |
| | | |
| | | } |
| | | // News.infoNoLog(""+mark+" - 0"+" - 对工作档的完成操作执行完成"); |
| | | News.infoNoLog(""+mark+" - 0"+" - 对工作档的完成操作执行完成"); |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | } |
| | | // News.infoNoLog(""+mark+" - 0"+" - 堆垛机异常信息记录执行完成"); |
| | | News.infoNoLog(""+mark+" - 0"+" - 堆垛机异常信息记录执行完成"); |
| | | } |
| | | |
| | | |
| | |
| | | //staProtocol.setStaNo(staProtocol.getSiteId().shortValue()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | log.error("输送线下发6:" + dto.getWorkNo() + "," + staProtocol.getSiteId()); |
| | | log.error("输送线下发(空板):" + dto.getWorkNo() + "," + staProtocol.getSiteId()); |
| | | if (!result) { |
| | | News.errorNoLog("" + mark + " - 1" + " - 更新plc站点信息失败"); |
| | | throw new CoolException("更新plc站点信息失败"); |
| | |
| | | LedCommand ledCommand = new LedCommand(); |
| | | ledCommand.setWorkNo(dto.getWorkNo()); |
| | | ledCommand.setIoType(1); |
| | | ledCommand.setTitle("全板入库"); |
| | | ledCommand.setTitle("空板入库"); |
| | | ledCommand.setLocNo(dto.getLocNo()); |
| | | ledCommand.setStaNo(dto.getStaNo()); |
| | | commands.add(ledCommand); |
| | |
| | | } |
| | | } |
| | | } |
| | | // News.infoNoLog(""+mark+" - 0"+" - 空栈板初始化入库,叉车入库站放货执行完成"); |
| | | News.infoNoLog(""+mark+" - 0"+" - 空栈板初始化入库,叉车入库站放货执行完成"); |
| | | } |
| | | |
| | | /** |
| | |
| | | case 53: |
| | | ledCommand.setTitle("拣料再入库"); |
| | | break; |
| | | case 54: |
| | | ledCommand.setTitle("并板再入库"); |
| | | break; |
| | | case 57: |
| | | ledCommand.setTitle("盘点再入库"); |
| | | break; |
| | |
| | | } else { |
| | | total = locDetl.getAnfme(); |
| | | } |
| | | if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1 || wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57) { |
| | | if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1 || wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57||wrkMast.getIoType() == 54) { |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getOrderNo(),wrkDetl.getOutOrderNo(),wrkDetl.getUnit(),wrkDetl.getWeight(),wrkDetl.getSupp(),wrkDetl.getLength() ,wrkDetl.getTemp1(), wrkDetl.getProType(),wrkDetl.getAnfme(),wrkDetl.getTemp2(), total)); |
| | | } |
| | | if (wrkMast.getIoType() == 103 ) { |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getOrderNo(),wrkDetl.getOutOrderNo(),wrkDetl.getUnit(),wrkDetl.getWeight(),wrkDetl.getSupp(),wrkDetl.getLength() ,wrkDetl.getTemp1(), wrkDetl.getProType(),wrkDetl.getAnfme(),wrkDetl.getTemp2(), total)); |
| | | } |
| | | if (wrkMast.getIoType() == 107) { |
| | | if (wrkMast.getIoType() == 107||wrkMast.getIoType()==104) { |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getOrderNo(),wrkDetl.getOutOrderNo(),wrkDetl.getUnit(),wrkDetl.getWeight(),wrkDetl.getSupp(),wrkDetl.getLength() ,wrkDetl.getTemp1(), wrkDetl.getProType(),wrkDetl.getAnfme(),wrkDetl.getTemp2(), total)); |
| | | } |
| | | }); |
| | |
| | | } |
| | | |
| | | LocMast sourceLoc = locMastService.queryDemoSourceLoc(crn.getId()); |
| | | LocMast loc = locMastService.queryDemoLoc(crn.getId()); |
| | | LocMast loc = locMastService.queryDemoLoc(crn.getId(),sourceLoc.getLocType2().toString()); |
| | | if (null == sourceLoc || null == loc) { |
| | | continue; |
| | | } |
| | |
| | | } |
| | | |
| | | if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { |
| | | |
| | | // if ((crnProtocol.getCrnNo()==3 || crnProtocol.getCrnNo()==4) && crnProtocol.getBay()==0 && crnProtocol.getLevel() == 1) { |
| | | // continue; |
| | | // } |
| | | // if ((crnProtocol.getCrnNo()==1 || crnProtocol.getCrnNo()==2) && crnProtocol.getBay()==1 && crnProtocol.getLevel() == 1) { |
| | | // continue; |
| | | // } |
| | | if (crnProtocol.getCrnNo()==1 && crnProtocol.getBay()==1 && crnProtocol.getLevel() == 1) { |
| | | if (crnProtocol.getBay()==0 && crnProtocol.getLevel() == 1) { |
| | | continue; |
| | | } |
| | | Page<BasCrnOpt> basCrnOptPage = crnOptService.selectPage(new Page<>(1, 1), new EntityWrapper<BasCrnOpt>().eq("crn_no", crn.getId()).orderBy("send_time", false)); |
| | |
| | | crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 堆垛机编号 |
| | | crnCommand.setTaskNo((short) 9999); // 工作号 |
| | | crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式: 堆垛机移动 |
| | | // crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式: 堆垛机移动 |
| | | crnCommand.setTaskMode(CrnTaskModeType.X_MOVE);//余姚锐麒回原点任务模式: 站位转移 |
| | | crnCommand.setSourcePosX(crnStn.getRow().shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosY((short) 1); // 源库位列 |
| | | crnCommand.setSourcePosY((short) 0); // 源库位列 |
| | | crnCommand.setSourcePosZ((short) 1); // 源库位层 |
| | | crnCommand.setDestinationPosX((short) 0); // 目标库位排 |
| | | crnCommand.setDestinationPosY((short) 0); // 目标库位列 |
| | | crnCommand.setDestinationPosZ((short) 0); // 目标库位层 |
| | | crnCommand.setCommand((short) 1); |
| | | crnCommand.setCommand((short) 1);//任务确认位 |
| | | // } |
| | | if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, crnCommand))) { |
| | | News.error("堆垛机移动命令下发失败,堆垛机号={},任务数据={}", crnProtocol.getCrnNo(), JSON.toJSON(crnCommand)); |