From 019f1c8bac7e8986d299aff70c123dedc1747d72 Mon Sep 17 00:00:00 2001 From: admin <15939171744@163.com> Date: 星期四, 06 六月 2024 11:15:10 +0800 Subject: [PATCH] - --- jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java | 297 +++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 247 insertions(+), 50 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 a261df7..4c55ea1 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 @@ -1,17 +1,24 @@ package com.jcdm.main.plcserver.sub; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jcdm.common.utils.StringUtils; import com.jcdm.framework.websocket.WebSocketUsers; +import com.jcdm.main.constant.Constants; import com.jcdm.main.da.collectionParamConf.domain.DaCollectionParamConf; import com.jcdm.main.da.collectionParamConf.service.IDaCollectionParamConfService; import com.jcdm.main.da.paramCollection.domain.DaParamCollection; import com.jcdm.main.da.paramCollection.service.IDaParamCollectionService; import com.jcdm.main.da.passingStationCollection.domain.DaPassingStationCollection; import com.jcdm.main.da.passingStationCollection.service.IDaPassingStationCollectionService; +import com.jcdm.main.da.testDeviceInterface.domain.DaTestDeviceInterface; +import com.jcdm.main.da.testDeviceInterface.service.IDaTestDeviceInterfaceService; import com.jcdm.main.om.productionOrde.domain.OmProductionOrdeInfo; import com.jcdm.main.om.productionOrde.service.IOmProductionOrdeInfoService; import com.jcdm.main.plcserver.conf.OPCElement; @@ -20,6 +27,9 @@ import com.kangaroohy.milo.model.ReadWriteEntity; 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.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -28,24 +38,32 @@ import java.util.*; import java.util.stream.Collectors; - +@Slf4j @Component public class OPCUaSubscription implements SubscriptionCallback { + + private static final Logger logger = LoggerFactory.getLogger("sys-user"); public SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //鏂拌嚜鍔ㄥ伐绔� - public List<String> automaticList = Arrays.asList("OP280", "OP320A","OP320B", "OP340A","OP340B", "OP350A","OP350B", "OP360","OP365","OP370", "OP390", "OP470"); + public List<String> automaticList = Arrays.asList("OP280","OP310A","OP310B", "OP300A","OP300B", "OP320A","OP320B", "OP340A","OP340B", "OP350A","OP350B", "OP360","OP365","OP370", "OP390", "OP470"); //閲囬泦妯$粍宸ヤ綅 ModuleCode - public List<String> moduleCodeList = Arrays.asList("OP320A","OP320B","OP340A","OP340B","OP365", "OP350A", "OP350B", "OP330"); + public List<String> moduleCodeList = Arrays.asList("OP300A","OP310A","OP310B","OP300B","OP320A","OP320B","OP340A","OP340B","OP365", "OP350A", "OP350B", "OP330"); //鍖哄垎妯$粍鍨嬪彿宸ヤ綅 public List<String> distinguishingModules = Arrays.asList("OP300","OP310", "OP340", "OP350", "OP330"); + //鍖哄垎灏忚溅鐮� + public List<String> agvId = Arrays.asList("OP360", "OP390", "OP470","OP280"); + //鍖哄垎pack鍨嬪彿鐨勫伐浣� public List<String> packIdList = Arrays.asList("OP280","OP360","OP390","OP470"); + + //娴嬭瘯璁惧鎵嬪姩宸ヤ綅 + public List<String> testList = Arrays.asList("OP430-1","OP430-2","OP430-3","OP430-4","OP480-1","OP480-2","OP480-3","OP440"); //绌虹殑 @@ -64,22 +82,28 @@ public static IOmProductionOrdeInfoService omProductionOrdeInfoService; + private static IDaTestDeviceInterfaceService daTestDeviceInterfaceService; + + public OPCUaSubscription(MiloService miloService, IDaPassingStationCollectionService daPassingStationCollectionService, IDaCollectionParamConfService collectionParamConfService, IDaParamCollectionService daParamCollectionService, - IOmProductionOrdeInfoService omProductionOrdeInfoService) { + IOmProductionOrdeInfoService omProductionOrdeInfoService, + IDaTestDeviceInterfaceService daTestDeviceInterfaceService) { OPCUaSubscription.miloService = miloService; this.daPassingStationCollectionService = daPassingStationCollectionService; OPCUaSubscription.collectionParamConfService = collectionParamConfService; OPCUaSubscription.daParamCollectionService = daParamCollectionService; OPCUaSubscription.omProductionOrdeInfoService = omProductionOrdeInfoService; + OPCUaSubscription.daTestDeviceInterfaceService = daTestDeviceInterfaceService; } @Override public void onSubscribe(String identifier, Object value) { + logger.info("鍦板潃锛�"+identifier+"鍊硷細"+value); try { if(null != value && Integer.valueOf(value.toString())!= 0) { String[] nodes = identifier.split("[.]"); @@ -88,20 +112,7 @@ String tab = nodes[2];//鏍囪 String tabVlaue = value.toString();//鍦板潃鍊� - //璇锋眰涓嬪彂SN鍙� - if (("RecordSN").equals(tab) && "1".equals(tabVlaue)) { - //鑾峰彇SN鍙锋柟娉� - String SNCode = getSNCode(); - - //涓嬪彂SN - String SNCodeAddress = thoroughfare + "." + device + ".SNCode"; - miloService.writeToOpcChar(ReadWriteEntity.builder().identifier(SNCodeAddress).value(SNCode).build()); - //涓嬪彂SN瀹屾垚 - String recordSNDoneAddress = thoroughfare + "." + device + ".RecordSNDone"; - miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(recordSNDoneAddress).value(1).build()); - } - //璇锋眰璁板綍鏁版嵁 - else if (("RecordData").equals(tab)) { + if (("RecordData").equals(tab)) { String recordDataDoneValue = ""; if("1".equals(tabVlaue)){ @@ -114,41 +125,64 @@ //鑷姩宸ヤ綅 if(automaticList.stream().anyMatch(s -> s.equals(device))){ //plc缁欐垜浠竴涓ā缁勭爜锛屾嬁妯$粍鐮佹牎楠屽嚭鍨嬪彿 - if(distinguishingModules.stream().anyMatch(s -> s.equals(device))) { + if(moduleCodeList.stream().anyMatch(s -> s.equals(device))) { + String RecordDataDoneAddress = thoroughfare + "." + device + ".RecordDataDone"; //璇绘ā缁勭爜 - String moduleCode = miloService.readFromOpcUa(thoroughfare + "." + device + ".ModuleCode").getValue().toString(); - String productTye = thoroughfare + "." + device + ".ProductType"; - if (null != moduleCode && moduleCode.length() == 24) { - miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(productTye).value(Integer.valueOf(moduleCode.substring(7, 8))).build()); - //杩涚珯淇濆瓨鏁版嵁 -// inSaveDate(thoroughfare,device) - //璁板綍鏁版嵁瀹屾垚 - String RecordDataDoneAddress = thoroughfare + "." + device + ".RecordDataDone"; + Object moduleCode = miloService.readFromOpcUa(thoroughfare + "." + device + ".ModuleCode").getValue(); + if(device.equals("OP365")){ + Object moduleCodeA = miloService.readFromOpcUa(thoroughfare + "." + device + ".ModuleCodeA").getValue(); + Object moduleCodeB = miloService.readFromOpcUa(thoroughfare + "." + device + ".ModuleCodeB").getValue(); + if(moduleCodeA!=null && moduleCodeB!=null){ + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(RecordDataDoneAddress).value(11).build()); + }else { + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(RecordDataDoneAddress).value(12).build()); + } + return; + } + if(moduleCode!=null){ miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(RecordDataDoneAddress).value(11).build()); - - - //璇锋眰宸ュ崟 - } else { - miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(12).build()); + }else { + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(RecordDataDoneAddress).value(12).build()); } }else { - //pack 濡傛灉鍖哄垎鍨嬪彿鐨勮瘽灏辫澶勭悊 - //璁板綍鏁版嵁瀹屾垚 - String RecordDataDoneAddress = thoroughfare + "." + device + ".RecordDataDone"; + if(agvId.stream().anyMatch(s -> s.equals(device))){ + Object agvIdObject = miloService.readFromOpcUa(thoroughfare + "." + device + ".AGVID").getValue(); + //agvId 灏忚溅鐮佹槸鍚︿负绌� + if(agvIdObject!=null){ + String PACKCode = thoroughfare + "." + device + ".MPACKCode"; + OmProductionOrdeInfo one = omProductionOrdeInfoService.getOne(new LambdaQueryWrapper<OmProductionOrdeInfo>().eq(OmProductionOrdeInfo::getTrolleyYard, agvIdObject.toString())); + //灏忚溅鐮佹煡鎵惧伐鍗曟槸鍚︿负绌� + if(one!=null){ + String packId = one.getProductNum(); + miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(PACKCode).value(packId).build()); + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(11).build()); + }else { + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(12).build()); + } + }else { + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(12).build()); + } - miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(RecordDataDoneAddress).value(11).build()); + }else { + String RecordDataDoneAddress = thoroughfare + "." + device + ".RecordDataDone"; + Object packCodeObject = miloService.readFromOpcUa(thoroughfare + "." + device + ".PACKCode").getValue(); + if(packCodeObject!=null){ + //pack 濡傛灉鍖哄垎鍨嬪彿鐨勮瘽灏辫澶勭悊 + //璁板綍鏁版嵁瀹屾垚 + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(RecordDataDoneAddress).value(11).build()); + }else { + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(RecordDataDoneAddress).value(12).build()); + } + } } }else { //鎵嬪姩宸ヤ綅澶勭悊閫昏緫 -// if(automaticList.stream().noneMatch(s -> s.equals(device))){ - //缁欏墠绔彂宸ヤ欢鍒颁綅淇″彿 +// if (map.containsKey(device)){ WebSocketUsers.sendMessageToUserByText(map.get(device), "IN"); + String RecordDataDoneAddress = thoroughfare + "." + device + ".RecordDataDone"; + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(RecordDataDoneAddress).value(11).build()); // } - //鏍¢獙鍚堟牸涓嶅悎鏍煎鏋滃悎鏍煎彲浠ヨ繘绔� - String RecordDataDoneAddress = thoroughfare + "." + device + ".RecordDataDone"; - - miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(RecordDataDoneAddress).value(11).build()); } @@ -162,7 +196,34 @@ miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(RecordDataDoneAddress).value(Integer.valueOf(recordDataDoneValue)).build()); }else { //鎵嬪姩宸ヤ綅 - WebSocketUsers.sendMessageToUserByText(map.get(device), "END"); +// if(device.contains("OP330")){ +// String str = device.substring(0,5); +// WebSocketUsers.sendMessageToUserByText(map.get(str), "END"); +// }else { + WebSocketUsers.sendMessageToUserByText(map.get(device), "END"); +// } + if(testList.stream().anyMatch(s -> s.equals(device))){ + String RecordDataDoneAddress = thoroughfare + "." + device + ".RecordDataDone"; + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(RecordDataDoneAddress).value(21).build()); +// Object packCodeObject = miloService.readFromOpcUa(thoroughfare + "." + device + ".ModuleCode").getValue(); +// DaTestDeviceInterface deviceInterfaceOne = null; +// +// if (ObjectUtil.isNotNull(packCodeObject)) { +// String modelCode = packCodeObject.toString(); +// deviceInterfaceOne = daTestDeviceInterfaceService.getOne(new LambdaQueryWrapper<DaTestDeviceInterface>() +// .eq(DaTestDeviceInterface::getProductNum, modelCode) +// .eq(DaTestDeviceInterface::getStationCode, device)); +// } +// +// if (deviceInterfaceOne != null && "1".equals(deviceInterfaceOne.getTotalResult())) { +// writeToOpc(RecordDataDoneAddress, (short) 21); +// } else { +// writeToOpc(RecordDataDoneAddress, (short) 22); +// } +// writeToOpc(RecordDataDoneAddress, (short) 21); + } + + } }else { System.out.println("^"); @@ -181,12 +242,16 @@ List<ReadWriteEntity> list1 = miloService.readFromOpcUa(list); List<Object> collect = list1.stream().map(ReadWriteEntity::getValue).collect(Collectors.toList()); String joinedString = String.join(",", collect.toString()); - WebSocketUsers.sendMessageToUserByText(map.get(device), joinedString); + WebSocketUsers.sendMessageToUserByText(map.get(device), TightenTheConversionOkNg(joinedString)); + if(device.contains("270") || device.contains("260")){ + logger.info("璇诲彇鍒板伐浣峽}鐨凷caner鏁版嵁锛歿}",device,TightenTheConversionOkNg(joinedString)); + } } } } } catch (Exception e) { - + logger.info("璁㈤槄鏂规硶鎶ラ敊:{}"+e.getMessage()); + logger.error("璁㈤槄鏂规硶鎶ラ敊",e); } } @@ -212,6 +277,16 @@ if(nullList.stream().noneMatch(s -> s.equals(device))){ if(moduleCodeList.stream().anyMatch(s -> s.equals(device))){ read = read + "ModuleCode"; + if(device.equals("OP365")){ + try { +// result = saveStationInfo365(thoroughfare,device); +// return result; + saveStationInfo365(thoroughfare,device); +// return result; + }catch (Exception e){ + e.printStackTrace(); + } + } }else { read = read + "PACKCode"; } @@ -245,10 +320,14 @@ //1銆佹洿鏂板伐鍗曚俊鎭� updateOrderInfo(snCode); } - + try{ + daParamCollectionService.pushGeelycvMesFeedback(snCode,device); + }catch (Exception e){ + } result = "21"; } + }catch (Exception e) { System.out.println(e.getMessage()); @@ -305,8 +384,8 @@ daPassingStationCollection.setLocationCode(device); String strt = TimeUtil.stringProcessing(startTime); String end = TimeUtil.stringProcessing(stopTime); - daPassingStationCollection.setInboundTime(sdf.parse(strt));//鍏ョ珯鏃堕棿 - daPassingStationCollection.setOutboundTime(sdf.parse(end));//鍑虹珯鏃堕棿 + daPassingStationCollection.setInboundTime(format.parse(TimeUtil.test(strt)));//鍏ョ珯鏃堕棿 + daPassingStationCollection.setOutboundTime(format.parse(TimeUtil.test(end)));//鍑虹珯鏃堕棿 daPassingStationCollection.setOutRsSign(stationStatus);//鍑虹珯鏄惁鍚堟牸 daPassingStationCollectionService.insertDaPassingStationCollection(daPassingStationCollection); } @@ -337,12 +416,20 @@ ParamCollection.setParamCode(list.get(i).getCollectParameterId()); ParamCollection.setLocationCode(device); if(tt.contains("Time")){ - String str = TimeUtil.getTimestamp(TimeUtil.stringProcessing(tt)); - ParamCollection.setParamValue(str); +// String str = TimeUtil.getTimestamp(TimeUtil.stringProcessing(tt)); +// ParamCollection.setParamValue(str); + ParamCollection.setParamValue(TimeUtil.test(TimeUtil.stringProcessing(tt))); }else { ParamCollection.setParamValue(readWriteEntityList.get(i).getValue().toString()); } ParamCollection.setSfcCode(packCode); + if(device.contains("OP360")){ + String node = nodeIdList.get(i); + Object value = miloService.readFromOpcUa("PACK.OP360.ModuleSNCode"+node.charAt(node.length()-1)).getValue(); + if(value!=null){ + ParamCollection.setModuleCode(value.toString()); + } + } ParamCollection.setParamName(list.get(i).getCollectParameterName()); ParamCollection.setParamUpper(list.get(i).getParamUpper()); ParamCollection.setParamLower(list.get(i).getParamLower()); @@ -411,4 +498,114 @@ omProductionOrdeInfoService.saveOrUpdate(one); } + public static void avgFunction(){ + + } + + public static String TightenTheConversionOkNg(String param){ + // 鍘婚櫎棣栧熬鐨勬柟鎷彿锛岀劧鍚庢寜鐓ч�楀彿鍒嗗壊瀛楃涓� + String[] parts = param.substring(1, param.length() - 1).split(","); + + // 鍒涘缓涓�涓柊鐨凷tringBuilder鏉ユ瀯寤烘浛鎹㈠悗鐨勫瓧绗︿覆 + StringBuilder sb = new StringBuilder(); + sb.append('['); // 娣诲姞宸︽柟鎷彿 + + for (int i = 0; i < parts.length; i++) { + String part = parts[i].trim(); // 鍘婚櫎鍙兘鐨勭┖鏍� + float value; + try { + value = Float.parseFloat(part); // 灏濊瘯灏嗗瓧绗︿覆杞崲涓烘诞鐐规暟 + String replacement; + if (value == 1f) { + replacement = "OK"; + } else if (value == 2f) { + replacement = "NG"; + } else { + replacement = part; // 濡傛灉涓嶆槸1鎴�2锛屽垯淇濇寔涓嶅彉 + } + sb.append(replacement); + if (i < parts.length - 1) { + sb.append(','); // 娣诲姞閫楀彿锛堥櫎浜嗘渶鍚庝竴涓厓绱狅級 + } + } catch (NumberFormatException e) { + // 濡傛灉杞崲澶辫触锛屽垯淇濇寔鍘熸牱锛堟垨杩涜鍏朵粬閿欒澶勭悊锛� + sb.append(part); + if (i < parts.length - 1) { + sb.append(','); + } + } + } + sb.append(']'); // 娣诲姞鍙虫柟鎷彿 + return sb.toString(); + } + + + /** + * 鏍¢獙鏄惁瀛樺湪NG + * @param packCode sfcCode + * @return boolean + */ + public boolean checkIsNG(String packCode,String modelCode){ + List<DaPassingStationCollection> list = daPassingStationCollectionService.list(new LambdaQueryWrapper<DaPassingStationCollection>() + .eq(StrUtil.isNotBlank(packCode),DaPassingStationCollection::getSfcCode, packCode) + .eq(DaPassingStationCollection::getOutRsSign, Constants.UN_PASS)); + return CollUtil.isEmpty(list); + } + + /** + * 淇濆瓨杩囩珯閲囬泦 + */ + public void saveStationInfo365(String thoroughfare,String device) throws Exception { + String RecordDataDoneAddress = thoroughfare + "." + device + ".RecordDataDone"; + String prefix = thoroughfare+"."+device+"."; + List<DaPassingStationCollection> passingStationCollections = new ArrayList<>(); + String ModuleCodeA = ""; + String ModuleCodeB = ""; + String StationStatusA = ""; + String StationStatusB = ""; + + Object objectModuleCodeA = miloService.readFromOpcUa(prefix + "ModuleCodeA").getValue(); + Object objectModuleCodeB = miloService.readFromOpcUa(prefix + "ModuleCodeB").getValue(); + Object objectStationStatusA = miloService.readFromOpcUa(prefix + "StationStatusA").getValue(); + Object objectStationStatusB = miloService.readFromOpcUa(prefix + "StationStatusB").getValue(); + + if(ObjectUtil.isNotNull(objectModuleCodeA) && ObjectUtil.isNotNull(objectStationStatusA) && ObjectUtil.isNotNull(objectModuleCodeB) && ObjectUtil.isNotNull(objectStationStatusB)){ + ModuleCodeA = objectModuleCodeA.toString(); + ModuleCodeB = objectModuleCodeB.toString(); + StationStatusA = objectStationStatusA.toString(); + StationStatusB = objectStationStatusB.toString(); + + String[] modeles = {ModuleCodeA,ModuleCodeB}; + String[] StationStatus = {StationStatusA,StationStatusB}; + + String startTime = miloService.readFromOpcUa(prefix + "StartTime").getValue().toString(); + String stopTime = miloService.readFromOpcUa(prefix + "StopTime").getValue().toString(); + for (int i = 0; i < 2; i++) { + DaPassingStationCollection daPassingStationCollection = new DaPassingStationCollection(); + String strt = TimeUtil.stringProcessing(startTime); + String end = TimeUtil.stringProcessing(stopTime); + daPassingStationCollection.setInboundTime(format.parse(TimeUtil.test(strt)));//鍏ョ珯鏃堕棿 + daPassingStationCollection.setOutboundTime(format.parse(TimeUtil.test(end)));//鍑虹珯鏃堕棿 + daPassingStationCollection.setSfcCode(modeles[i]); + daPassingStationCollection.setLocationCode(device); + daPassingStationCollection.setOutRsSign(StationStatus[i]);//鍑虹珯鏄惁鍚堟牸 + passingStationCollections.add(daPassingStationCollection); + } + daPassingStationCollectionService.saveBeachDaPassingStationCollection(passingStationCollections); + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(RecordDataDoneAddress).value(21).build()); +// return "21"; + }else { + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(RecordDataDoneAddress).value(22).build()); +// return "22"; + } + } + + private static void writeToOpc(String identifier, short value) { + try { + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(identifier).value(value).build()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } -- Gitblit v1.9.3