| | |
| | | package com.jcdm.main.plcserver.sub; |
| | | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | |
| | | import com.kangaroohy.milo.runner.subscription.SubscriptionCallback; |
| | | import com.kangaroohy.milo.service.MiloService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.math.BigDecimal; |
| | |
| | | @Component |
| | | public class OPCUaSubscription implements SubscriptionCallback { |
| | | |
| | | private static final Logger logger = LoggerFactory.getLogger("sys-user"); |
| | | public static MiloService miloService; |
| | | |
| | | public IDaCollectionParamConfService collectionParamConfService; |
| | |
| | | String ecpStr = "";//异常记录标记 |
| | | try { |
| | | if(null != value && "1".equals(value.toString())) { |
| | | // if (OPCElement.OP121_ZZ_CODE_CHECK.equals(identifier)){ |
| | | // rework("2V91Y RD25D080",identifier); |
| | | // } |
| | | //1、检索SN号 |
| | | //2、过站参数采集 |
| | | //3、扫码枪数据回传 |
| | |
| | | List<String> collect2 = lists.stream().filter(x -> OPCElement.SAVE_DATA.equals(x.getrFunction())) |
| | | .map(DaOpcuaConfig::getNode).collect(Collectors.toList()); |
| | | if (collect1.contains(identifier)){ |
| | | log.info("-------监听到,{}的CODE_CHECK的信号",identifier); |
| | | log.info("-------time--------------,{}",LocalDateTime.now()); |
| | | logger.info("-------监听到,{}的CODE_CHECK的信号",identifier); |
| | | //logger.info("-------time--------------,{}",LocalDateTime.now()); |
| | | //sn |
| | | this.SNRetrieval(identifier,value.toString()); |
| | | if (identifier.equals(OPCElement.OP120_ZZ_CODE_CHECK) && "1".equals(value.toString())){ |
| | | //总装上线扫码传输数据 |
| | | log.info("-------监听到,{}的扫码枪扫码的CODE_CHECK的信号",identifier); |
| | | logger.info("-------监听到,{}的扫码枪扫码的CODE_CHECK的信号",identifier); |
| | | scannerGunMessage(); |
| | | } |
| | | if (identifier.equals(OPCElement.OP060_HX_CODE_CHECK) && "1".equals(value.toString())){ |
| | | Object SNCodeObject = miloService.readFromOpcUa("CFL4HX.OP060.Code1").getValue(); |
| | | if (null == SNCodeObject){ |
| | | SNCodeObject = miloService.readFromOpcUa("CFL4HX.OP060.Code").getValue(); |
| | | } |
| | | if (null != SNCodeObject){ |
| | | String XT=null; |
| | | String CZ=null; |
| | | String SNCode = SNCodeObject.toString(); |
| | | DaParamCollection ParamCollection = new DaParamCollection(); |
| | | ParamCollection.setSfcCode(SNCode); |
| | | List<DaParamCollection> DaParamCollectionlist=daParamCollectionService.selectDaParamCollectionList(ParamCollection); |
| | | List<DaParamCollection> XTParamCollection = DaParamCollectionlist.stream().filter(x -> "箱体".equals(x.getParamName())).collect(Collectors.toList()); |
| | | if (CollUtil.isNotEmpty(XTParamCollection)){ |
| | | DaParamCollection lastOne = XTParamCollection.get(0); |
| | | XT = lastOne.getParamValue(); |
| | | } |
| | | List<DaParamCollection> CZParamCollection = DaParamCollectionlist.stream().filter(x -> "曲轴".equals(x.getParamName())).collect(Collectors.toList()); |
| | | if (CollUtil.isNotEmpty(CZParamCollection)){ |
| | | DaParamCollection lastOne = CZParamCollection.get(0); |
| | | CZ = lastOne.getParamValue(); |
| | | } |
| | | if(null != XT&&null != CZ) { |
| | | passingStationCollectionServiceImpl.sendMessage(XT+"*"+CZ,"OP060"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (collect2.contains(identifier)){ |
| | | if ("1".equals(value.toString())){ |
| | | log.info("-------监听到,{}的SAVE_REQUEST_LAST的信号",identifier); |
| | | log.info("-------time--------------,{}",LocalDateTime.now()); |
| | | //save |
| | | logger.info("-------监听到,{}的SAVE_REQUEST_LAST的信号",identifier); |
| | | //logger.info("-------time--------------,{}",LocalDateTime.now()); |
| | | this.SaveData(identifier); |
| | | |
| | | } |
| | | } |
| | | |
| | | } |
| | | } catch (Exception e) { |
| | | System.out.println(e.getMessage()); |
| | |
| | | } |
| | | if (null != SNCodeObject){ |
| | | String SNCode = SNCodeObject.toString(); |
| | | passingStationCollectionServiceImpl.sendMessage(SNCode); |
| | | passingStationCollectionServiceImpl.sendMessage(SNCode,"OP120"); |
| | | } |
| | | } |
| | | |
| | |
| | | Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code").getValue(); |
| | | if(null != SNCodeObject) { |
| | | String SNCode=SNCodeObject.toString(); |
| | | // String a=passingStationCollectionServiceImpl.SelectSN(SNCode,parts[1]); |
| | | // String a=passingStationCollectionServiceImpl.SelectSN(SNCode,parts[1]); |
| | | String a; |
| | | BsOrderScheduling bsOrderSchedulingQuery = new BsOrderScheduling(); |
| | | bsOrderSchedulingQuery.setEngineNo(SNCode); |
| | |
| | | DaPassingStationCollection PassingStationCollection=new DaPassingStationCollection(); |
| | | PassingStationCollection.setSfcCode(SNCode); |
| | | daPassingStationCollections = passingStationCollectionServiceImpl.selectDaPassingStationCollectionList(PassingStationCollection); |
| | | if (CollUtil.isNotEmpty(daPassingStationCollections)){ |
| | | DaPassingStationCollection lastOne = daPassingStationCollections.get(daPassingStationCollections.size() - 1); |
| | | String outRsSign = lastOne.getOutRsSign(); |
| | | if ("合格".equals(outRsSign)){ |
| | | a = "1"; |
| | | }else { |
| | | a = "2"; |
| | | } |
| | | } |
| | | // if (CollUtil.isNotEmpty(daPassingStationCollections)){ |
| | | // DaPassingStationCollection lastOne = daPassingStationCollections.get(daPassingStationCollections.size() - 1); |
| | | // String outRsSign = lastOne.getOutRsSign(); |
| | | // if ("合格".equals(outRsSign)){ |
| | | // a = "1"; |
| | | // }else { |
| | | // a = "2"; |
| | | // } |
| | | // } |
| | | RmRepairRecord rmRepairRecord = new RmRepairRecord(); |
| | | rmRepairRecord.setBoxCode(SNCode); |
| | | rmRepairRecords = rmRepairRecordService.selectRmRepairRecordList(rmRepairRecord); |
| | | if (CollUtil.isNotEmpty(rmRepairRecords)){ |
| | | a = "1"; |
| | | }else { |
| | | a = "2"; |
| | | } |
| | | |
| | | } |
| | | log.info("-----返回codeCheckFeed-----,{}",a); |
| | | logger.info("-----返回codeCheckFeed-----,{}",a); |
| | | // String a="1"; |
| | | // 1:OK可生产 2:NG不可生产 3:NG可返工 4:PC检索失败(无记录)5:PC检索失败(软件) |
| | | if (StrUtil.isNotBlank(a)){ |
| | | int input = Integer.parseInt(a); |
| | | ReadWriteEntity entity = new ReadWriteEntity(parts[0]+"."+parts[1]+".CodeCheckFeed", input); |
| | | log.info("-------监听到,{}的CodeCheck的信号",Node); |
| | | logger.info("发动机号:{},监听到{}的CodeCheck的信号",SNCode,Node); |
| | | miloService.writeToOpcByte(entity); |
| | | log.info("监听到返回codecheckfeed信号,{}",entity); |
| | | logger.info("监听到返回codecheckfeed信号,{}",entity); |
| | | //首站传输订单号 |
| | | if (OPCElement.OP050_HX_CODE_CHECK.equals(Node)){ |
| | | //查询订单号 |
| | |
| | | BsOrderScheduling bsOrderScheduling1 = tempList.get(0); |
| | | orderNum = bsOrderScheduling1.getOrderNo(); |
| | | } |
| | | |
| | | ReadWriteEntity entity2 = new ReadWriteEntity(parts[0]+"."+parts[1]+".OrderNumber", orderNum); |
| | | miloService.writeToOpcUa(entity2); |
| | | } |
| | | //如果是返修工位需要传输返修工位号 |
| | | if (OPCElement.OP465_ZZ_CODE_CHECK.equals(Node) || OPCElement.OP355_ZZ_CODE_CHECK.equals(Node) |
| | | || OPCElement.OP695_ZZ_CODE_CHECK.equals(Node) || OPCElement.OP755_ZZ_CODE_CHECK.equals(Node)){ |
| | | |
| | | rework(SNCode,Node,daPassingStationCollections,rmRepairRecords); |
| | | } |
| | | if (OPCElement.OP020_HX_CODE_CHECK.equals(Node)) { |
| | | //激光打码 |
| | | String[] printcode=SNCode.split("\\s+"); |
| | | ReadWriteEntity entity3 = new ReadWriteEntity("CFL4HX.HOP020.PrintCode1", printcode[0]); |
| | | OPCUaSubscription.miloService.writeToOpcUa(entity3);//写SN |
| | | ReadWriteEntity entity5 = new ReadWriteEntity("CFL4HX.HOP020.PrintCode2", printcode[1]); |
| | | OPCUaSubscription.miloService.writeToOpcUa(entity5);//写SN |
| | | ReadWriteEntity entity6 = new ReadWriteEntity("CFL4HX.HOP020.SNDoor", "1"); |
| | | logger.info("发动机号{},请求打码内容写入成功,返回SNDoor信号信号1",SNCode); |
| | | miloService.writeToOpcByte(entity6); |
| | | } |
| | | System.out.println(entity); |
| | | |
| | |
| | | //过站记录 |
| | | // List<DaPassingStationCollection> daPassingStationCollections = passingStationCollectionServiceImpl.selectDaPassingStationCollectionList(PassingStationCollection); |
| | | |
| | | //所有反工工位 |
| | | //所有返工工位 |
| | | List<String> collect1 = rmRepairRecords.stream().map(RmRepairRecord::getProcessesCode).collect(Collectors.toList()); |
| | | if (CollUtil.isNotEmpty(collect1)){ |
| | | //查询出所有需要返修工位的最小op块 |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | //所有放行工位 |
| | | List<String> passStation = new ArrayList<>(); |
| | | //所有生产工位 |
| | |
| | | readWriteEntity.setValue(minOP); |
| | | miloService.writeToOpcShort(readWriteEntity); |
| | | miloService.writeToOpcByte(writeList); |
| | | log.info("返修写入:,{}",writeList); |
| | | logger.info("{}返修写入:,{}",SNCode,writeList); |
| | | if (CollUtil.isNotEmpty(OP755List)){ |
| | | miloService.writeToOpcByte(OP755List); |
| | | } |
| | |
| | | |
| | | List<ReadWriteEntity> readWriteEntityList = new ArrayList<>(); |
| | | if(CollUtil.isNotEmpty(nodeIdList)){ |
| | | long time1 = new Date().getTime(); |
| | | //long time1 = new Date().getTime(); |
| | | readWriteEntityList = miloService.readFromOpcUa(nodeIdList); |
| | | long time2 = new Date().getTime(); |
| | | log.info("读取点位花费时间:{},",time2-time1); |
| | | //long time2 = new Date().getTime(); |
| | | //logger.info("读取点位花费时间:{},",time2-time1); |
| | | } |
| | | //返回plc保存成功 |
| | | if (parts.length==3){ |
| | |
| | | ReadWriteEntity entity = new ReadWriteEntity(parts[0] + "." + parts[1] + ".SaveFeedLast", 1); |
| | | miloService.writeToOpcByte(entity); |
| | | } |
| | | log.info("-------请求返回,{}的SaveFeedLast的信号",Node); |
| | | log.info("-------请求返回-----,{}",LocalDateTime.now()); |
| | | logger.info("{}保存请求信号返回,MES->PLC的SaveFeedLast信号",Node); |
| | | //logger.info("-------请求返回-----,{}",LocalDateTime.now()); |
| | | } |
| | | |
| | | BsOrderScheduling bsOrderScheduling=bsOrderSchedulingService.selectBsOrderSchedulingSNCode(SNCode); |
| | | |
| | | List<DaParamCollection> daParamCollectionlist = new ArrayList<>(); |
| | | if (CollUtil.isNotEmpty(nodeIdList)){ |
| | | for(int i=0;i<nodeIdList.size();i++){ |
| | |
| | | ParamCollection.setState("合格"); |
| | | ParamCollection.setType(list.get(i).getCollectParameterType()); |
| | | ParamCollection.setCollectionTime(new Date()); |
| | | ParamCollection.setWorkOrderNo(bsOrderScheduling.getOrderNo()); |
| | | daParamCollectionlist.add(ParamCollection); |
| | | } |
| | | } |
| | | daParamCollectionService.saveBeachDaParamCollection(daParamCollectionlist); |
| | | log.info("-------保存数据完成---------"); |
| | | logger.info("{}发动机({})采集数据保存完成",SNCode,Node); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | Long beatTime = 0L; |
| | | if (ObjectUtil.isNotEmpty(object)){ |
| | | String str = object.toString(); |
| | | beatTime = Float.valueOf(str).longValue(); |
| | | } |
| | | Object ProductStatus = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".ProductStatus").getValue(); |
| | | log.info("ProductStatus,{}",ProductStatus.toString()); |
| | | logger.info("ProductStatus,{}",ProductStatus.toString()); |
| | | String str1="合格" ; |
| | | if (ObjectUtil.isNotEmpty(ProductStatus)){ |
| | | String productStatusString = ProductStatus.toString(); |
| | |
| | | PassingStationCollection.setCreateTime(new Date()); |
| | | PassingStationCollection.setBeatTime(beatTime.toString()); |
| | | PassingStationCollection.setOutRsSign(str1); |
| | | PassingStationCollection.setWorkOrderNo(bsOrderScheduling.getOrderNo()); |
| | | passingStationCollectionServiceImpl.insertDaPassingStationCollection(PassingStationCollection); |
| | | log.info("-------保存过站记录数据完成---------"); |
| | | logger.info("{}发动机({})过站数据保存完成",SNCode,Node); |
| | | |
| | | //更新工单状态 |
| | | if ("OP790".equals(parts[1])) { |
| | | //bsOrderScheduling.setReport20("0"); |
| | | bsOrderScheduling.setProductionStatus("3"); |
| | | bsOrderScheduling.setFinalAssemblyOfflineTime(new Date()); |
| | | }else if("OP050".equals(parts[1])){ |
| | | bsOrderScheduling.setReport10("0"); |
| | | bsOrderScheduling.setProductionStatus("2"); |
| | | bsOrderScheduling.setBoxClosingOnlineTime(new Date()); |
| | | }else if("OP120".equals(parts[1])){ |
| | | bsOrderScheduling.setReport20("0"); |
| | | bsOrderScheduling.setFinalAssemblyLaunchTime(new Date()); |
| | | bsOrderScheduling.setClosingBoxOfflineTime(new Date()); |
| | | } |
| | | bsOrderScheduling.setQualityStatus(str1); |
| | | bsOrderScheduling.setCurrentWorkstation(parts[1]); |
| | | bsOrderSchedulingService.updateBsOrderScheduling(bsOrderScheduling); |
| | | } |
| | | } |
| | | } |