From 0d85b1ed7d9254779f7b5e2ac80b60cf1c9e121a Mon Sep 17 00:00:00 2001 From: wujian <14790700720@163.com> Date: 星期六, 27 四月 2024 22:05:51 +0800 Subject: [PATCH] change model7 --- jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java | 270 +++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 187 insertions(+), 83 deletions(-) diff --git a/jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java b/jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java index 5f7ab2d..c3db99e 100644 --- a/jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java +++ b/jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java @@ -21,15 +21,15 @@ import com.kangaroohy.milo.model.ReadWriteEntity; import com.kangaroohy.milo.runner.subscription.SubscriptionCallback; import com.kangaroohy.milo.service.MiloService; +import javafx.animation.Timeline; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.math.BigDecimal; +import java.sql.Time; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -55,6 +55,8 @@ public IBsTechnologyRouteChildInfoService bsTechnologyRouteChildInfoService; + public HashMap<String,List<DaCollectionParamConf>> allCollectParamList = new HashMap<>(); + public OPCUaSubscription(MiloService miloService, IDaCollectionParamConfService collectionParamConfService, IDaParamCollectionService daParamCollectionService, @@ -74,13 +76,14 @@ } - - @Override public void onSubscribe(String identifier, Object value) { String ecpStr = "";//寮傚父璁板綍鏍囪 try { if(null != value && "1".equals(value.toString())) { +// if (OPCElement.OP121_ZZ_CODE_CHECK.equals(identifier)){ +// rework("2V91Y RD25D080",identifier); +// } //1銆佹绱N鍙� //2銆佽繃绔欏弬鏁伴噰闆� //3銆佹壂鐮佹灙鏁版嵁鍥炰紶 @@ -89,6 +92,8 @@ 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("-------鐩戝惉鍒�,{}鐨凜ODE_CHECK鐨勪俊鍙�",identifier); + log.info("-------time--------------,{}",LocalDateTime.now()); //sn this.SNRetrieval(identifier,value.toString()); if (identifier.equals(OPCElement.OP120_ZZ_CODE_CHECK) && "1".equals(value.toString())){ @@ -99,42 +104,20 @@ } if (collect2.contains(identifier)){ if ("1".equals(value.toString())){ + log.info("-------鐩戝惉鍒�,{}鐨凷AVE_REQUEST_LAST鐨勪俊鍙�",identifier); + log.info("-------time--------------,{}",LocalDateTime.now()); //save this.SaveData(identifier); - //杩斿洖plc淇濆瓨鎴愬姛 - String[] parts = identifier.split("[.]"); - if (parts.length==3){ - if ("SaveRequest".equals(parts[2])){ - ReadWriteEntity entity = new ReadWriteEntity(parts[0] + "." + parts[1] + ".SaveFeed", 1); - log.info("-------鐩戝惉鍒�,{}鐨剆aveRequest鐨勪俊鍙�",identifier); - Integer i = map.getOrDefault(identifier + "鐨剆aveRequest鐨勪俊鍙�",0); - if (0==i){ - map.put(identifier + "鐨剆aveRequest鐨勪俊鍙�",i+1); - } -// miloService.writeToOpcByte(entity); - }else if ("SaveRequestLast".equals(parts[2])){ - ReadWriteEntity entity = new ReadWriteEntity(parts[0] + "." + parts[1] + ".SaveFeedLast", 1); - log.info("-------鐩戝惉鍒�,{}鐨凷aveRequestLast鐨勪俊鍙�",identifier); - Integer i = map.getOrDefault(identifier + "鐨凷aveRequestLast鐨勪俊鍙�",0); - if (0==i){ - map.put(identifier + "鐨凷aveRequestLast鐨勪俊鍙�",i+1); - } -// miloService.writeToOpcByte(entity); - } - } + } } } - - - } catch (Exception e) { System.out.println(e.getMessage()); } finally { if (!"".equals(ecpStr)) { System.out.println(ecpStr + "\r\n"); - } } } @@ -142,6 +125,9 @@ private void scannerGunMessage() throws Exception { String[] parts = OPCElement.OP120_ZZ_CODE_CHECK.split("[.]"); Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code1").getValue(); + if (null == SNCodeObject){ + SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code").getValue(); + } if (null != SNCodeObject){ String SNCode = SNCodeObject.toString(); passingStationCollectionServiceImpl.sendMessage(SNCode); @@ -156,6 +142,7 @@ if(null != SNCodeObject) { String SNCode=SNCodeObject.toString(); String a=passingStationCollectionServiceImpl.SelectSN(SNCode,parts[1]); + log.info("-----杩斿洖codeCheckFeed-----,{}",a); // String a="1"; // 1:OK鍙敓浜� 2:NG涓嶅彲鐢熶骇 3:NG鍙繑宸� 4:PC妫�绱㈠け璐ワ紙鏃犺褰曪級5:PC妫�绱㈠け璐ワ紙杞欢锛� if (StrUtil.isNotBlank(a)){ @@ -175,20 +162,22 @@ } ReadWriteEntity entity2 = new ReadWriteEntity(parts[0]+"."+parts[1]+".OrderNumber", orderNum); -// miloService.writeToOpcByte(entity2); + miloService.writeToOpcUa(entity2); } //濡傛灉鏄繑淇伐浣嶉渶瑕佷紶杈撹繑淇伐浣嶅彿 - if (OPCElement.OP465_ZZ_CODE_CHECK.equals(Node) || OPCElement.OP355_ZZ_CODE_CHECK.equals(Node)){ - rework(SNCode); + 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); } -// miloService.writeToOpcByte(entity); + System.out.println(entity); + miloService.writeToOpcByte(entity); } } } } - private void rework(String SNCode) { + private void rework(String SNCode,String Node) throws Exception{ BsOrderScheduling bsOrderScheduling = new BsOrderScheduling(); bsOrderScheduling.setEngineNo(SNCode); List<String> allProcessCoed = new ArrayList<>(); @@ -205,79 +194,194 @@ rmRepairRecord.setBoxCode(SNCode); List<ReadWriteEntity> writeList = new ArrayList<>(); List<RmRepairRecord> rmRepairRecords = rmRepairRecordService.selectRmRepairRecordList(rmRepairRecord); + //杩囩珯璁板綍 + DaPassingStationCollection PassingStationCollection=new DaPassingStationCollection(); + PassingStationCollection.setSfcCode(SNCode); + //杩囩珯璁板綍 + List<DaPassingStationCollection> daPassingStationCollections = passingStationCollectionServiceImpl.selectDaPassingStationCollectionList(PassingStationCollection); + //鎵�鏈夊弽宸ュ伐浣� List<String> collect1 = rmRepairRecords.stream().map(RmRepairRecord::getProcessesCode).collect(Collectors.toList()); - //鎵�鏈夋斁琛屽伐浣� - List<String> collect2 = allProcessCoed; - if (CollUtil.isNotEmpty(rmRepairRecords)){ - //鏁版嵁搴撴煡璇㈠嚭鐨勫伐浣� - rmRepairRecords.forEach(x -> { - ReadWriteEntity readWriteEntity = new ReadWriteEntity(); - readWriteEntity.setIdentifier(x.getProcessesCode()); - readWriteEntity.setValue(1); - writeList.add(readWriteEntity); + //鏌ヨ鍑烘墍鏈夐渶瑕佽繑淇伐浣嶇殑鏈�灏弌p鍧� + Integer minOP = 0; + if (CollUtil.isNotEmpty(collect1)){ + + List<Integer> sortList = new ArrayList<>(); + collect1.stream().forEach(x ->{ + String op = x.replace("OP", ""); + if (StrUtil.isNotBlank(op)){ + int i = Integer.parseInt(op); + sortList.add(i); + } }); - collect2 = allProcessCoed.stream().filter(x -> !collect1.contains(x)).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(sortList)){ + List<Integer> collect2 = sortList.stream().sorted().collect(Collectors.toList()); + minOP = collect2.get(0); + } } - if (CollUtil.isNotEmpty(collect2)){ - collect2.forEach(x -> { + + //鎵�鏈夋斁琛屽伐浣� + //杩囩珯璁板綍闄ゅ幓杩斾慨璁板綍灏辨槸浼�2锛岃繑淇暟鎹強鍚庨潰鍗犱綅鏁版嵁浼�1 + List<String> collect3 = daPassingStationCollections.stream().map(DaPassingStationCollection::getLocationCode).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(collect1)){ + collect3 = collect3.stream().filter(x -> !collect1.contains(x)).collect(Collectors.toList()); + } + String[] parts = Node.split("[.]"); + String par = parts[0]+"."+parts[1]; + if (CollUtil.isNotEmpty(collect3)){ + collect3.forEach(x -> { ReadWriteEntity readWriteEntity = new ReadWriteEntity(); - readWriteEntity.setIdentifier(x); + readWriteEntity.setIdentifier(par+"."+x); readWriteEntity.setValue(2); writeList.add(readWriteEntity); }); } - if (CollUtil.isNotEmpty(writeList)){ - ReadWriteEntity readWriteEntity = new ReadWriteEntity(); - readWriteEntity.setIdentifier("Repair_sign"); - readWriteEntity.setValue(1); - writeList.add(readWriteEntity); -// miloService.writeToOpcByte(writeList); + //闇�鐢熶骇宸ヤ綅 + List<String> collect4 = allProcessCoed; + if (CollUtil.isNotEmpty(collect3)){ + List<String> finalCollect = collect3; + collect4 = allProcessCoed.stream().filter(x -> !finalCollect.contains(x)).collect(Collectors.toList()); } + if (CollUtil.isNotEmpty(collect4)){ + //鏁版嵁搴撴煡璇㈠嚭鐨勫伐浣� + collect4.forEach(x -> { + ReadWriteEntity readWriteEntity = new ReadWriteEntity(); + readWriteEntity.setIdentifier(par+"."+x); + readWriteEntity.setValue(1); + writeList.add(readWriteEntity); + }); + } +// List<String> collect2 = allProcessCoed; +// if (CollUtil.isNotEmpty(rmRepairRecords)){ +// //鏁版嵁搴撴煡璇㈠嚭鐨勫伐浣� +// rmRepairRecords.forEach(x -> { +// ReadWriteEntity readWriteEntity = new ReadWriteEntity(); +// readWriteEntity.setIdentifier(x.getProcessesCode()); +// readWriteEntity.setValue(1); +// writeList.add(readWriteEntity); +// }); +// collect2 = allProcessCoed.stream().filter(x -> !collect1.contains(x)).collect(Collectors.toList()); +// } +// if (CollUtil.isNotEmpty(collect2)){ +// collect2.forEach(x -> { +// ReadWriteEntity readWriteEntity = new ReadWriteEntity(); +// readWriteEntity.setIdentifier(x); +// readWriteEntity.setValue(2); +// writeList.add(readWriteEntity); +// }); +// } + + String a=passingStationCollectionServiceImpl.SelectSN(SNCode,parts[1]); + if (StrUtil.isNotBlank(a)){ + int input = Integer.parseInt(a); + ReadWriteEntity entity = new ReadWriteEntity(parts[0]+"."+parts[1]+".CodeCheckFeed", input); + writeList.add(entity); + } + ReadWriteEntity readWriteEntity = new ReadWriteEntity(); + readWriteEntity.setIdentifier("Repair_sign"); + readWriteEntity.setValue(minOP); + writeList.add(readWriteEntity); + if (CollUtil.isNotEmpty(writeList)){ + List<ReadWriteEntity> tempList = new ArrayList<>(); + for (int i = 0; i < writeList.size(); i++) { + tempList.add(writeList.get(i)); + if (tempList.size()>10){ + miloService.writeToOpcByte(tempList); + log.info("鍐欏叆杩斾慨锛�,{}",tempList); + tempList = new ArrayList<>(); + } + } + if (CollUtil.isNotEmpty(tempList)){ + miloService.writeToOpcByte(tempList); + log.info("鍐欏叆杩斾慨锛�,{}",tempList); + } + + + } +// miloService.writeToOpcByte(writeList); } public void SaveData(String Node) throws Exception { + String[] parts = Node.split("[.]"); Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code1").getValue(); - + if (null == SNCodeObject){ + SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code").getValue(); + } if(null != SNCodeObject) { String SNCode = SNCodeObject.toString(); - List<DaCollectionParamConf> list; - DaCollectionParamConf daCollectionParamConf = new DaCollectionParamConf(); - daCollectionParamConf.setGatherAddress(parts[0] + "." + parts[1]); - list = collectionParamConfService.selectDaCollectionParamConfList(daCollectionParamConf); + Object object = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Runtime").getValue(); + String gatherAddress = parts[0] + "." + parts[1]; + List<DaCollectionParamConf> list = new ArrayList<>(); + if (allCollectParamList.containsKey(gatherAddress)){ + list = allCollectParamList.get(gatherAddress); + }else { + DaCollectionParamConf daCollectionParamConf = new DaCollectionParamConf(); + daCollectionParamConf.setGatherAddress(gatherAddress); + daCollectionParamConf.setRemarks("1"); + list = collectionParamConfService.selectDaCollectionParamConfList(daCollectionParamConf); + if (CollUtil.isNotEmpty(list)){ + //鍔犲叆hashmap + allCollectParamList.put(gatherAddress,list); + } + } List<String> nodeIdList = list.stream().map(info -> { String nodeid = info.getGatherAddress(); return nodeid; }).collect(Collectors.toList()); - if(!nodeIdList.isEmpty()){ - List<ReadWriteEntity> readWriteEntityList = miloService.readFromOpcUa(nodeIdList); - List<DaParamCollection> daParamCollectionlist = new ArrayList<>(); - for(int i=0;i<nodeIdList.size();i++){ - DaParamCollection ParamCollection = new DaParamCollection(); - if(!readWriteEntityList.get(i).getValue().toString().equals("0.0")){ - ParamCollection.setParamCode(readWriteEntityList.get(i).getIdentifier().toString().split("[.]")[2]); - ParamCollection.setLocationCode(parts[1]); - ParamCollection.setParamValue(readWriteEntityList.get(i).getValue().toString()); - ParamCollection.setSfcCode(SNCode); - ParamCollection.setParamName(list.get(i).getCollectParameterName()); - ParamCollection.setParamUpper(list.get(i).getParamUpper()); - ParamCollection.setParamLower(list.get(i).getParamLower()); - ParamCollection.setUnit(list.get(i).getCollectParameterUnit()); - ParamCollection.setState("鍚堟牸"); - ParamCollection.setType(list.get(i).getCollectParameterType()); - ParamCollection.setCollectionTime(new Date()); - daParamCollectionlist.add(ParamCollection); - } - } - daParamCollectionService.saveBeachDaParamCollection(daParamCollectionlist); + List<ReadWriteEntity> readWriteEntityList = new ArrayList<>(); + if(CollUtil.isNotEmpty(nodeIdList)){ + long time1 = new Date().getTime(); + readWriteEntityList = miloService.readFromOpcUa(nodeIdList); + long time2 = new Date().getTime(); + log.info("璇诲彇鐐逛綅鑺辫垂鏃堕棿锛歿},",time2-time1); } + //杩斿洖plc淇濆瓨鎴愬姛 + if (parts.length==3){ + if ("SaveRequest".equals(parts[2])){ + ReadWriteEntity entity = new ReadWriteEntity(parts[0] + "." + parts[1] + ".SaveFeed", 1); + miloService.writeToOpcByte(entity); + }else if ("SaveRequestLast".equals(parts[2])){ + ReadWriteEntity entity = new ReadWriteEntity(parts[0] + "." + parts[1] + ".SaveFeedLast", 1); + miloService.writeToOpcByte(entity); + } + log.info("-------璇锋眰杩斿洖,{}鐨凷aveFeedLast鐨勪俊鍙�",Node); + log.info("-------璇锋眰杩斿洖-----,{}",LocalDateTime.now()); + } + List<DaParamCollection> daParamCollectionlist = new ArrayList<>(); + if (CollUtil.isNotEmpty(nodeIdList)){ + for(int i=0;i<nodeIdList.size();i++){ + if(!readWriteEntityList.get(i).getValue().toString().equals("0.0")){ + DaParamCollection ParamCollection = new DaParamCollection(); + ParamCollection.setParamCode(readWriteEntityList.get(i).getIdentifier().toString().split("[.]")[2]); + ParamCollection.setLocationCode(parts[1]); + if (readWriteEntityList.get(i) == null){ + ParamCollection.setParamValue("0"); + }else { + ParamCollection.setParamValue(readWriteEntityList.get(i).getValue().toString()); + } + ParamCollection.setSfcCode(SNCode); + ParamCollection.setParamName(list.get(i).getCollectParameterName()); + ParamCollection.setParamUpper(list.get(i).getParamUpper()); + ParamCollection.setParamLower(list.get(i).getParamLower()); + ParamCollection.setUnit(list.get(i).getCollectParameterUnit()); + ParamCollection.setState("鍚堟牸"); + ParamCollection.setType(list.get(i).getCollectParameterType()); + ParamCollection.setCollectionTime(new Date()); + daParamCollectionlist.add(ParamCollection); + } + } + daParamCollectionService.saveBeachDaParamCollection(daParamCollectionlist); + log.info("-------淇濆瓨鏁版嵁瀹屾垚---------"); + } - Object object = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Runtime").getValue(); + + + Long beatTime = 0L; if (ObjectUtil.isNotEmpty(object)){ String str = object.toString(); @@ -293,7 +397,7 @@ PassingStationCollection.setBeatTime(beatTime.toString()); PassingStationCollection.setOutRsSign("鍚堟牸"); passingStationCollectionServiceImpl.insertDaPassingStationCollection(PassingStationCollection); - + log.info("-------淇濆瓨杩囩珯璁板綍鏁版嵁瀹屾垚---------"); } } -- Gitblit v1.9.3