| | |
| | | import com.zy.core.thread.LedThread; |
| | | import com.zy.core.thread.RgvThread; |
| | | import com.zy.core.thread.SiemensDevpThread; |
| | | import com.zy.system.entity.Config; |
| | | 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 WaitPakinMapper waitPakinMapper; |
| | | @Autowired |
| | | private LocMastService locMastService; |
| | | @Autowired |
| | | private ConfigService configService; |
| | | @Autowired |
| | | private StaDescService staDescService; |
| | | @Autowired |
| | |
| | | } |
| | | 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; |
| | | } |
| | |
| | | // 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()); |
| | |
| | | new EntityWrapper<BasCrnp>().eq("crn_no", crnProtocol.getCrnNo()) |
| | | ); |
| | | boolean result = true; |
| | | if(crnProtocol.getCrnNo() != 5 ){ |
| | | if(crnProtocol.getCrnNo() == 3){ |
| | | return; |
| | | } |
| | | |
| | | for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) { |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); |
| | | if(crnStn.getStaNo() == 4001){ |
| | |
| | | int x=1; |
| | | switch (crnProtocol.getCrnNo()){ |
| | | case 1: x =2; break; |
| | | case 2: x =6; break; |
| | | case 3: x =11; break; |
| | | case 2: x =7; break; |
| | | case 3: x =10; break; |
| | | case 4: x =14; break; |
| | | case 5: x =18; break; |
| | | } |
| | |
| | | // 判断堆垛机出库站状态 |
| | | // 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; |
| | | // } |
| | | // } |
| | | // |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | |
| | | // 堆垛机控制过滤 |
| | |
| | | break; |
| | | // continue; |
| | | } |
| | | if (staProtocol2.isLoading() && staProtocol2.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) { |
| | | if (staProtocol2.isLoading() && staProtocol2.isAutoing() && staProtocol2.getWorkNo() == 9997) { |
| | | // 堆垛机控制过滤 |
| | | if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { |
| | | // continue; |
| | |
| | | break; |
| | | } |
| | | } |
| | | if (staProtocol3.isLoading() && staProtocol3.isAutoing()) { |
| | | if (staProtocol3.isLoading() && staProtocol3.isAutoing()&& staProtocol3.getWorkNo() == 9997) { |
| | | // 堆垛机控制过滤 |
| | | if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { |
| | | // continue; |
| | |
| | | log.error("{}号RGV尚未在数据库进行维护!4", slave.getId()); |
| | | continue; |
| | | } |
| | | if(staProtocol == null){ |
| | | continue; |
| | | } |
| | | if(staProtocol.getWorkNo() == 0){ |
| | | continue; |
| | | } |
| | |
| | | rgvCommand.setRgvNo(rgvId); // RGV编号 |
| | | RgvTaskStatusType type; |
| | | Integer targetPosition = 0; |
| | | String typeNo = null; |
| | | if(wrkMastSta.getWrkSts() == 0){ |
| | | type = RgvTaskStatusType.FETCH; //取货 |
| | | targetPosition = wrkMastSta.getStaStart(); |
| | | typeNo = "2"; |
| | | }else{ |
| | | type = RgvTaskStatusType.PUT; //放货 |
| | | targetPosition = wrkMastSta.getStaEnd(); |
| | | typeNo = "3"; |
| | | } |
| | | Date now = new Date(); |
| | | if (targetPosition == 1038) { |
| | | System.out.println("小车下发命令时间:" + |
| | | new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(now)); |
| | | } |
| | | EntityWrapper<BasRgvOpt> entityWrapper = new EntityWrapper<>(); |
| | | entityWrapper.eq("rgv_no", rgvId) |
| | | .orderBy("send_time"); |
| | | BasRgvOpt basRgvOpt = basRgvOptService.selectOne(entityWrapper); |
| | | BasRgvOpt basRgvOpt = basRgvOptService.getBasRgvOpt(rgvId); |
| | | // 防止重复下发命令 |
| | | if (basRgvOpt != null) { |
| | | // 获取最新记录的 mode 对应的任务类型 |
| | | RgvTaskStatusType latestTaskStatus = RgvTaskStatusType.valueOf(basRgvOpt.getMode()); |
| | | // 判断当前命令与最新记录是否相同 |
| | | if (latestTaskStatus == type && 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); // 工位任务模式: 取货 |
| | | rgvCommand.setTargetPosition(targetPosition); //工位目标站点 |
| | |
| | | * arm任务完成自动组托 |
| | | * */ |
| | | public synchronized void armMissionAccomplished1() { |
| | | Config configAGVAUTOIN = configService.selectConfigByCode("AGVAUTOIN"); |
| | | if(!Boolean.parseBoolean(configAGVAUTOIN.getValue())){ |
| | | return; |
| | | } |
| | | try{ |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | // 遍历拣料入库口 |
| | |
| | | * arm任务完成自动组托 |
| | | * */ |
| | | public synchronized void armMissionAccomplished2() { |
| | | Config configAGVAUTOIN = configService.selectConfigByCode("AGVAUTOIN"); |
| | | if(!Boolean.parseBoolean(configAGVAUTOIN.getValue())){ |
| | | return; |
| | | } |
| | | try{ |
| | | List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>().gt("arm_no",4)); |
| | | for (BasArm basArm : basArmList) { |
| | |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("status", 2) |
| | | .eq("binding_tags", basArmMast.getBindingTags())); |
| | | if (binding_tags<2){ |
| | | if (binding_tags==1){ |
| | | BasArmMast basArmMastOne = basArmMastService.selectOne( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("status", 2) |
| | |
| | | continue; |
| | | } |
| | | |
| | | } else if (binding_tags == 0){ |
| | | boolean signBinding_tags_barcode = false; |
| | | List<BasArmMast> binding_tags_barcodeList = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("barcode", barcode)); |
| | | for (BasArmMast basArmMastBarcode : binding_tags_barcodeList){ |
| | | Integer selectCountAndBindingTags = basArmMastService.selectCountAndBindingTags(basArmMastBarcode.getArmNo(), basArmMastBarcode.getOrderNo(), basArmMastBarcode.getMatnr(),basArmMastBarcode.getBindingTags()); |
| | | Integer selectCountAndBindingTagsLog = basArmMastService.selectCountAndBindingTagsLog(basArmMastBarcode.getArmNo(),basArmMastBarcode.getOrderNo(), basArmMastBarcode.getMatnr(),basArmMastBarcode.getBindingTags()); |
| | | |
| | | Double anfmeSignOne = basArmMastService.selectBasArmMastSignValue(basArmMastBarcode.getOrderNo(), basArmMastBarcode.getMatnr(),basArmMastBarcode.getBindingTags()); |
| | | if ((selectCountAndBindingTags + selectCountAndBindingTagsLog) != anfmeSignOne.intValue()) { |
| | | // signBinding_tags_barcode = true; ///// |
| | | break; |
| | | } |
| | | } |
| | | if (signBinding_tags_barcode){ |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "数据异常!!!", staProtocol.getSiteId()+"码垛位置,上一个分拣组未全部完成!!!", false); |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | | // OrderDetlValueResultUtil orderDetlValueResultUtil = basArmMastService.selectOrderDetlValue(basArmMast.getOrderNo(), basArmMast.getMatnr()); |
| | |
| | | * arm任务下发 |
| | | * */ |
| | | public synchronized void armTaskAssignment2() { |
| | | Config configAGVAUTOIN = configService.selectConfigByCode("AGVAUTOIN"); |
| | | if(!Boolean.parseBoolean(configAGVAUTOIN.getValue())){ |
| | | return; |
| | | } |
| | | try{ |
| | | List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>().gt("arm_no",4)); |
| | | for (BasArm basArm : basArmList) { |
| | |
| | | // 遍历结果集,检查时间戳差值是否小于 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; |
| | | } |
| | |
| | | // 任务生成区 -------------------------------------------------------------------------- |
| | | |
| | | BasAgvMast basAgvMast = new BasAgvMast(); |
| | | |
| | | BasAgvWrkDetl basAgvWrkDetl = new BasAgvWrkDetl(); |
| | | |
| | | try { |
| | | LocTypeDto locTypeDto = new LocTypeDto(staProtocol); |
| | |
| | | * agv任务生成 Empty |
| | | * */ |
| | | public synchronized void agvTaskCreateR() { |
| | | |
| | | Config configAGVAUTOIN = configService.selectConfigByCode("AGVAUTOIN"); |
| | | |
| | | // 根据输送线plc遍历 |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | // 遍历出库口 |
| | |
| | | .le("row1", 26) |
| | | .orderBy("io_time",true) |
| | | ); |
| | | }else if(inStaAgv.getStaNo() < 4000){ |
| | | }else if(inStaAgv.getStaNo() < 4000 && Boolean.parseBoolean(configAGVAUTOIN.getValue())){ |
| | | locMastList = locMastService.selectList(new EntityWrapper<LocMast>() |
| | | .eq("loc_sts", "R") |
| | | .ge("row1", 28) |
| | | .le("row1", 31) |
| | | .orderBy("io_time",true)); |
| | | floorNo = 2; |
| | | }else{ |
| | | }else if(inStaAgv.getStaNo() < 5000){ |
| | | locMastList = locMastService.selectList(new EntityWrapper<LocMast>() |
| | | .eq("loc_sts", "R") |
| | | .ge("row1", 32) |
| | | .le("row1", 38) |
| | | .orderBy("io_time",true)); |
| | | floorNo = 3; |
| | | }else{ |
| | | continue; |
| | | } |
| | | |
| | | for (LocMast locMast : locMastList){ |
| | |
| | | if ((!Cools.isEmpty(staProtocol.getWorkNo()) && staProtocol.getWorkNo().equals(basAgvMast.getTaskNo())) || basAgvMast.getSourceStaNo().equals(2033)){ |
| | | AgvTaskAssignmentParam agvTaskAssignmentParam = new AgvTaskAssignmentParam(basAgvMast); |
| | | if(basAgvMast.getFloorNo()==1) { |
| | | // WrkMast wrkMast = wrkMastService.selectByWrkNo(staProtocol.getWorkNo()); |
| | | // AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast); |
| | | // agvBindCtnrAndBinParam.setCtnrCode(basAgvMast.getTimestamp().toString()); |
| | | // agvBindCtnrAndBinParam.setCtnrTyp("1"); |
| | | // ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV容器绑定解绑", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam); |
| | | // if (resultBind.getCode()==200){ |
| | | // //任务下发 |
| | | // ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam); |
| | | // if (result.getCode()==200){ |
| | | // basAgvMast.setStatus(1); |
| | | // basAgvMastService.updateById(basAgvMast); |
| | | // } else { |
| | | // agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV任务下发失败", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false); |
| | | // } |
| | | // } else { |
| | | // agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV容器绑定解绑", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false); |
| | | // } |
| | | //任务下发 |
| | | ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam); |
| | | if (result.getCode()==200){ |
| | |
| | | agvBindCtnrAndBinTwoParam.setPodcode(basAgvMast.getBarcode()); |
| | | agvBindCtnrAndBinTwoParam.setPositionCode(basAgvMast.getSourceStaNo().toString()); |
| | | agvBindCtnrAndBinTwoParam.setIndBind("1");; |
| | | ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV容器绑定解绑", |
| | | ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV容器绑定", |
| | | AgvConstant.AGV_URL+"/"+AgvConstant.AGV_hikRpcService,AgvConstant.getAGVADAPTOR(2), agvBindCtnrAndBinTwoParam); |
| | | if (resultBind.getCode()!=200){ |
| | | basAgvMast.setStatus(4); |