From fffcf2e84ff8790e3e9a3371111ffdb4e9ad58bb Mon Sep 17 00:00:00 2001 From: "USER-20220102CG\\noblelift" <546428999@qq.com> Date: Mon, 11 Sep 2023 12:07:36 +0800 Subject: [PATCH] rev opc --- .../agv/ndcone/AgvNdcOneDeviceDriver.java | 8 +- .../nl/acs/opc/DeviceOpcProtocolRunable.java | 74 +++- .../acs/opc/DeviceOpcSynchronizeAutoRun.java | 274 +++------------ .../main/java/org/nl/acs/opc/OpcEntity.java | 318 +++++++++--------- 4 files changed, 260 insertions(+), 414 deletions(-) diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java index 2f4224d..27d6516 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java @@ -229,13 +229,13 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic //标准版-机械手对接位 if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorSiteDeviceDriver) { lnshPalletizingManipulatorSiteDeviceDriver = (LnshPalletizingManipulatorSiteDeviceDriver) device.getDeviceDriver(); - lnshPalletizingManipulatorSiteDeviceDriver.writing(2); if (lnshPalletizingManipulatorSiteDeviceDriver.getMode() != 0 && lnshPalletizingManipulatorSiteDeviceDriver.getMove() != 0 && (lnshPalletizingManipulatorSiteDeviceDriver.getIo_action() == 3 || lnshPalletizingManipulatorSiteDeviceDriver.getIo_action() == 1) && (lnshPalletizingManipulatorSiteDeviceDriver.getAction() == 3 || lnshPalletizingManipulatorSiteDeviceDriver.getAction() == 1)) { inst.setExecute_status("1"); instructionService.update(inst); + lnshPalletizingManipulatorSiteDeviceDriver.writing(2); data = AgvService.sendAgvOneModeInst(phase, index, 0); lnshPalletizingManipulatorSiteDeviceDriver.setMessage(""); flag = true; @@ -264,7 +264,6 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic //标准版-工位(交互模板) if(device.getDeviceDriver() instanceof LnshStationDeviceDriver){ lnshStationDeviceDriver=(LnshStationDeviceDriver) device.getDeviceDriver(); - lnshStationDeviceDriver.writing(3); if(lnshStationDeviceDriver.getMode()!=0 &&lnshStationDeviceDriver.getMove() != 0 && (lnshStationDeviceDriver.getIo_action() == 3 || lnshStationDeviceDriver.getIo_action() == 1) @@ -352,7 +351,6 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic //标准版-下发条码输送线 if(device.getDeviceDriver() instanceof ConveyorBarcodeDeviceDriver){ conveyorBarcodeDeviceDriver = (ConveyorBarcodeDeviceDriver) device.getDeviceDriver(); - conveyorBarcodeDeviceDriver.writing(3); if (conveyorBarcodeDeviceDriver.getMode() == 2 ) { inst.setExecute_status("1"); @@ -380,7 +378,6 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic //标准版-叠盘机 LnshFoldDiscSiteDeviceDriverl if(device.getDeviceDriver() instanceof LnshFoldDiscSiteDeviceDriver){ lnshFoldDiscSiteDeviceDriver = (LnshFoldDiscSiteDeviceDriver) device.getDeviceDriver(); - lnshFoldDiscSiteDeviceDriver.writing(3); if (lnshFoldDiscSiteDeviceDriver.getMode() != 0 && lnshFoldDiscSiteDeviceDriver.getContainer_qty() > 0) { // && (lnshFoldDiscSiteDeviceDriver.getIo_action() == 3 || lnshFoldDiscSiteDeviceDriver.getIo_action() == 1) @@ -408,6 +405,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic } message += "不允许AGV取货。"; agv_message = lnshFoldDiscSiteDeviceDriver.getDevice_code() + message; + agv_device.setStatus_message(agv_message); lnshFoldDiscSiteDeviceDriver.setMessage(message); logService.deviceExecuteLog(device_code, "", "", message); lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message)); @@ -1251,7 +1249,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic //任务号 jo.put("task_code", ObjectUtil.isEmpty(instruction) ? "0" : instruction.getTask_code()); //异常 - jo.put("fault", this.getError_message()); + jo.put("message", agv_message); return jo; } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceOpcProtocolRunable.java b/acs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceOpcProtocolRunable.java index 3c99b78..1aef7e1 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceOpcProtocolRunable.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceOpcProtocolRunable.java @@ -7,6 +7,9 @@ import lombok.extern.slf4j.Slf4j; import org.nl.acs.udw.UnifiedDataAccessor; import org.nl.acs.udw.UnifiedDataAccessorFactory; import org.nl.acs.udw.UnifiedDataAppService; +import org.nl.modules.lucene.service.LuceneExecuteLogService; +import org.nl.modules.lucene.service.dto.LuceneLogDto; +import org.nl.modules.wql.util.SpringContextHolder; import org.openscada.opc.lib.da.*; import java.util.*; @@ -24,6 +27,9 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC private int all_null; private Map itemSearchCache; + LuceneExecuteLogService lucene = SpringContextHolder.getBean(LuceneExecuteLogService.class); + + public DeviceOpcProtocolRunable() { this.error_num = 0; this.all_null = 0; @@ -48,10 +54,12 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC this.OpcServer = opcServer; } + private OpcItemDto getItem(String item) { OpcItemDto x = (OpcItemDto) this.itemSearchCache.get(item); if (x == null) { Iterator var3 = this.protocols.iterator(); + while (var3.hasNext()) { OpcItemDto dto = (OpcItemDto) var3.next(); if (StrUtil.equals(item, dto.getItem_code())) { @@ -61,9 +69,11 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC } } } + return x; } + @Override public void run() { if (OpcConfig.opc_item_read_using_callback) { @@ -73,7 +83,9 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC } } + private void runOld() { + OpcServerService opcServerService = SpringContextHolder.getBean(OpcServerService .class); while (true) { start: try { @@ -87,10 +99,10 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC log.trace("清理server..."); } - this.server = OpcServerUtl.getServerWithOutException(this.OpcServer.getOpc_host(), this.OpcServer.getCls_id(), this.OpcServer.getUser(), this.OpcServer.getPassword(), this.OpcServer.getDomain()); - this.server.addStateListener(this); - group = this.server.addGroup(); - + group =opcServerService.getServer(this.getOpcServer().getOpc_code()); +// this.server = OpcServerUtl.getServerWithOutException(this.OpcServer.getOpc_host(), this.OpcServer.getCls_id(), this.OpcServer.getUser(), this.OpcServer.getPassword(), this.OpcServer.getDomain()); +// this.server.addStateListener(this); +// group = this.server.addGroup(); List itemsString = new ArrayList(); Iterator var3 = this.protocols.iterator(); @@ -130,7 +142,6 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC OpcStartTag.is_run = true; } - //线程名 tag = ""; if (log.isWarnEnabled()) { tag = Thread.currentThread().getName(); @@ -138,10 +149,10 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC tag = tag + this.getOpcGroupID(); } } + UnifiedDataAccessor accessor_value = UnifiedDataAccessorFactory.getAccessor(OpcConfig.udw_opc_value_key); boolean time_out = false; - label97: while (DeviceOpcSynchronizeAutoRun.isRun) { long begin = System.currentTimeMillis(); if (log.isTraceEnabled()) { @@ -154,6 +165,7 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC if (log.isTraceEnabled()) { log.trace("{} 读取耗时:{}", tag, duration); } + if (duration > 1000L) { if (!time_out) { log.warn("{} 读取超时 : {}", tag, duration); @@ -180,6 +192,10 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC Object his = accessor_value.getValue(itemId); if (!ObjectUtl.isEquals(itemState.getQuality(), QualityTypeValue.OPC_QUALITY_GOOD) && his != null) { log.warn("opc 值不健康 item: {}, 状态: {}", itemId, itemState.getQuality()); +// valueAllNotNull = false; + + ThreadUtl.sleep((long) ((new Random()).nextInt(3) +1) * 1000); + break start; } if (!UnifiedDataAppService.isEquals(value, his)) { @@ -187,8 +203,9 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC if (true) { this.logItemChanged(itemId, accessor_value, value, itemDto); } - - accessor_value.setValue(itemId, value); + if(!ObjectUtil.isEmpty(value)){ + accessor_value.setValue(itemId, value); + } } } @@ -209,17 +226,17 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC random *= 1000; if (this.all_null < 3) { if (log.isWarnEnabled()) { - log.warn("{} 所有内容都为空, all_null:{} ,暂定{}s", tag, all_null, 5000 + random); + log.warn("{} 所有内容都为空, all_null:{} ,暂定{}s", tag, all_null,5000 + random); } ThreadUtl.sleep((long) (5000 + random)); } else if (this.all_null < 6) { if (log.isWarnEnabled()) { log.warn(tag + "重新创建server"); - log.warn("{} 所有内容都为空, all_null:{} ,暂定{}s", tag, all_null, 30000 + random); + log.warn("{} 所有内容都为空, all_null:{} ,暂定{}s", tag, all_null,30000 + random); } // ThreadUtl.sleep((long) (30000 + random)); - ThreadUtl.sleep((long) ((new Random()).nextInt(3) + 1) * 1000); + ThreadUtl.sleep((long) ((new Random()).nextInt(3) +1) * 1000); break start; } else if (this.all_null < 12) { if (log.isWarnEnabled()) { @@ -233,8 +250,8 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC } ThreadUtl.sleep((long) (120000 + random)); - } + ++this.all_null; } else { this.all_null = 0; @@ -250,9 +267,9 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC try { this.server.disconnect(); } catch (Exception var25) { - } } + this.server = null; if (!DeviceOpcSynchronizeAutoRun.isRun) { log.warn("opc线程停止2。。。"); @@ -339,6 +356,7 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC } } + public void connectionStateChanged(boolean connected) { if (!connected) { this.server = null; @@ -359,6 +377,8 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC long seconds = mss % 60000L / 1000L; return days + " days " + hours + " hours " + minutes + " minutes " + seconds + " seconds "; } + + public void changed(Item item, ItemState itemState) { String itemId = item.getId(); @@ -400,11 +420,31 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC Object obj = accessor_value.getValue(relate); sb.append("key:" + relate + "value:" + obj + ";"); } - log.warn("设备:{}信号{}变更从{}->{};信号快照:{}", new Object[]{itemDto.getDevice_code(), itemId, his, value, sb}); -// this.businessLogger.setResource(itemDto.getDevice_code(), itemDto.getDevice_name()).log("信号{}变更从{}->{};信号快照:{}", new Object[]{itemId, his, value, sb}); + //log.warn("设备:{}信号{}变更从{}->{};信号快照:{}", new Object[]{itemDto.getDevice_code(), itemId, his, value, sb}); + if (!itemDto.getItem_code().endsWith("heartbeat") && !itemDto.getItem_code().endsWith("time")) { + if(!ObjectUtil.equal(his,"null") || !ObjectUtil.equal(value,"null") || !ObjectUtil.isEmpty(his) || !ObjectUtil.isEmpty(value)){ +// log.warn("{} 信号 {} 发生变更 {} -> {} 信号快照 {}", itemDto.getDevice_code(), itemCode, his, value, sb); + lucene.deviceExecuteLog(new LuceneLogDto(itemDto.getOpc_server_code(), itemDto.getOpc_plc_code(), itemDto.getDevice_code(), itemDto.getItem_code().substring(itemDto.getItem_code().lastIndexOf(".") + 1), String.valueOf(his), String.valueOf(value))); + } + } + + } else { - log.warn("设备:{}信号{}变更从{}->{};信号快照:{}", new Object[]{itemDto.getDevice_code(), itemId, his, value}); -// this.businessLogger.setResource(itemDto.getDevice_code(), itemDto.getDevice_name()).log("信号{}变更从{}->{}", new Object[]{itemId, his, value}); + //log.warn("设备:{}信号{}变更从{}->{};信号快照:{}", new Object[]{itemDto.getDevice_code(), itemId, his, value}); + if (!itemDto.getItem_code().endsWith("heartbeat") && !itemDto.getItem_code().endsWith("time")) { + // 存在上次点位值为null情况 则不记录日志 + if((ObjectUtil.equal(his,"null") || ObjectUtil.isEmpty(his)) || (ObjectUtil.equal(value,"null") || ObjectUtil.isEmpty(value)) ){ + //lucene.deviceExecuteLog(new LuceneLogDto(itemDto.getOpc_server_code(), itemDto.getOpc_plc_code(), itemDto.getDevice_code(), itemDto.getItem_code().substring(itemDto.getItem_code().lastIndexOf(".") + 1), String.valueOf(his), String.valueOf(value))); + System.out.println("his:"+his + ",value:"+ value); + } else { + lucene.deviceExecuteLog(new LuceneLogDto(itemDto.getOpc_server_code(), itemDto.getOpc_plc_code(), itemDto.getDevice_code(), itemDto.getItem_code().substring(itemDto.getItem_code().lastIndexOf(".") + 1), String.valueOf(his), String.valueOf(value))); + } + +// if(!ObjectUtil.equal(his,"null") || !ObjectUtil.equal(value,"null") || !ObjectUtil.isEmpty(his) || !ObjectUtil.isEmpty(value)){ +// log.warn("{} 信号 {} 发生变更 {} -> {} 信号快照 {}", itemDto.getDevice_code(), itemCode, his, value, sb); +// lucene.deviceExecuteLog(new LuceneLogDto(itemDto.getOpc_server_code(), itemDto.getOpc_plc_code(), itemDto.getDevice_code(), itemDto.getItem_code().substring(itemDto.getItem_code().lastIndexOf(".") + 1), String.valueOf(his), String.valueOf(value))); +// } + } } } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceOpcSynchronizeAutoRun.java b/acs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceOpcSynchronizeAutoRun.java index f7ba123..1817f8e 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceOpcSynchronizeAutoRun.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceOpcSynchronizeAutoRun.java @@ -1,5 +1,7 @@ package org.nl.acs.opc; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import org.apache.lucene.util.NamedThreadFactory; import org.nl.acs.auto.run.AbstractAutoRunnable; @@ -25,260 +27,66 @@ import java.util.concurrent.*; @Component @Slf4j public class DeviceOpcSynchronizeAutoRun extends AbstractAutoRunnable { - static boolean isRun = true; + + public static boolean isRun = false; + ExecutorService executorService = Executors.newCachedThreadPool(); @Autowired private DeviceAppService deviceAppService; @Autowired private OpcServerManageService opcServerManageService; - @Autowired - LuceneExecuteLogService lucene; - - static ExecutorService executorService; - public static Map opcServersConfig; - public static Map itemCodeOpcItemDtoMapping = new ConcurrentHashMap(); - - static boolean canRefreshOpcEntity = true; - private long lastRefreshOpcEntityTime; - static UnifiedDataAccessor udw; - private static Map canReadOpcValues; - private static volatile Map opcCodeOpcEntityMapping; - - public DeviceOpcSynchronizeAutoRun() { - this.lastRefreshOpcEntityTime = 0L; - } + @Override public String getCode() { return DeviceOpcSynchronizeAutoRun.class.getSimpleName(); } + @Override public String getName() { return "opc设备同步器"; } - static Group getGroup(String opcCode) throws Exception { - OpcServerService opcServerService = SpringContextHolder.getBean(OpcServerService.class); - return opcServerService.getServer(opcCode); - } - - static void submitTimeLimitTask(Runnable runnable, String opcCode) { - CompletableFuture future = CompletableFuture.runAsync(runnable, executorService); - -// try { -// future.get(10L, TimeUnit.SECONDS); -// } catch (InterruptedException var9) { -// Thread.currentThread().interrupt(); -// } catch (ExecutionException var10) { -// var10.printStackTrace(); -// } catch (TimeoutException var11) { -// itemCodeOpcItemDtoMapping.keySet().forEach((key) -> { -// udw.setValue(key, (Object) null); -// }); -// canReadOpcValues = new ConcurrentHashMap<>(); -// System.out.println("opc设备同步器 任务执行超时,取消任务..."); -// future.cancel(true); -// } finally { -// canRefreshOpcEntity = true; -// if (opcCode != null) { -// canReadOpcValues.put(opcCode, true); -// } -// -// } - } - - private ExecutorService createThreadPool() { - ThreadPoolExecutor executor = new ThreadPoolExecutor(32, 32, 10L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), new NamedThreadFactory("opc-sync")); - executor.allowCoreThreadTimeOut(true); - return executor; - } - - public void autoRun() { - OpcStartTag.is_run = true; - opcServersConfig = this.opcServerManageService.queryAllServerMap(); - executorService = this.createThreadPool(); - opcCodeOpcEntityMapping = new ConcurrentHashMap(); - itemCodeOpcItemDtoMapping.keySet().forEach((key) -> { - udw.setValue(key, (Object) null); - }); - canRefreshOpcEntity = true; - canReadOpcValues.clear(); - - while (true) { - this.refreshOpcEntity(); - Iterator var1 = opcServersConfig.keySet().iterator(); - - while (var1.hasNext()) { - String opcCode = (String) var1.next(); - submitTimeLimitTask(() -> { - boolean in = false; - try { - if (canReadOpcValues.computeIfAbsent(opcCode, (key) -> true)) { - in = true; - canReadOpcValues.put(opcCode, false); - this.readOpcValues(opcCode); - } - } catch (Exception var3) { - var3.printStackTrace(); - } finally { - canRefreshOpcEntity = true; - if (opcCode != null && in) { - canReadOpcValues.put(opcCode, true); - } - } - }, opcCode); - } - - ThreadUtl.sleep((long) OpcConfig.synchronized_millisecond); - } - } - - private void readOpcValues(String opcCode) throws Exception { - synchronized (opcCode.intern()) { - OpcEntity opcEntity = (OpcEntity) opcCodeOpcEntityMapping.get(opcCode); - if (opcEntity != null) { - if (opcEntity.getItems().size() != 0) { - long begin = System.currentTimeMillis(); - if (log.isTraceEnabled()) { - log.trace("opc {} 开始计时{}", opcCode, begin); - } - - new HashMap(); - - Map itemStatus; - try { - itemStatus = opcEntity.readAll(); - } catch (Exception var15) { - itemStatus = opcEntity.readDividually(); - } - - long end = System.currentTimeMillis(); - long duration = end - begin; - if (log.isTraceEnabled()) { - log.trace("opc {} 读取耗时:{}", opcCode, duration); - } - - if (duration > 1000L) { - log.warn("opc {} 读取超时 : {}", opcCode, duration); - } - -// boolean allNull = itemStatus.entrySet().stream().map((map) -> { -// try { -// return OpcUtl.getValue((Item)map.getKey(), (ItemState)map.getValue()); -// } catch (Exception e) { -// throw new RuntimeException(e); -// } -// }).allMatch(Objects::isNull); -// if (allNull) { -// opcEntity.getItems().clear(); -// } - - UnifiedDataAccessor udw = opcEntity.getUdw(); - - - Set items = itemStatus.keySet(); - Iterator var18 = items.iterator(); - - while (var18.hasNext()) { - Item item = (Item) var18.next(); - ItemState itemState = (ItemState) itemStatus.get(item); - Object nowValue = OpcUtl.getValue(item, itemState); - String itemId = item.getId(); - Object historyValue = udw.getValue(itemId); - if (!ObjectUtl.isEquals(itemState.getQuality(), QualityTypeValue.OPC_QUALITY_GOOD) && historyValue != null) { - log.warn("opc 值不健康 item: {}, 状态: {}", itemId, itemState.getQuality()); - } - if (!UnifiedDataAppService.isEquals(nowValue, historyValue)) { - OpcItemDto itemDto = (OpcItemDto) itemCodeOpcItemDtoMapping.get(itemId); - if (true) { - this.logItemChanged(itemId, udw, nowValue, itemDto); - } - udw.setValue(itemId, nowValue); - } - - } - + @Override + public void autoRun() throws Exception { + { + isRun = true; + + Map servers = this.opcServerManageService.queryAllServerMap(); + Map>> pros; + do{ + Thread.sleep(1000L); + pros = this.deviceAppService.findAllFormatProtocolFromDriver(); + }while (ObjectUtil.isEmpty(pros)); + Set keys = pros.keySet(); + Iterator var4 = keys.iterator(); + //代码执行一次 + while (var4.hasNext()) { + String key = (String) var4.next(); + List> list = (List) pros.get(key); + OpcServerManageDto opcServer = (OpcServerManageDto) servers.get(key); + Iterator var8 = list.iterator(); + while (var8.hasNext()) { + List groupProtols = (List) var8.next(); + DeviceOpcProtocolRunable runable = new DeviceOpcProtocolRunable(); + runable.setProtocols(groupProtols); + runable.setOpcServer(opcServer); + this.executorService.submit(runable); } } - } - } - private void refreshOpcEntity() { - if (canRefreshOpcEntity) { - canRefreshOpcEntity = false; - long now = System.currentTimeMillis(); - if (now - this.lastRefreshOpcEntityTime >= 20000L) { - this.lastRefreshOpcEntityTime = now; - submitTimeLimitTask(() -> { - try { - Map>> protocol = this.deviceAppService.findAllFormatProtocolFromDriver(); - Iterator var2 = protocol.entrySet().iterator(); + // 同步无光电设备信号 + //Map>> pros1 = this.deviceAppService.findAllFormatProtocolFromDriver(); + //List opcDrivers = this.deviceAppService.findDeviceDriver(DeviceDriver.class); - while (var2.hasNext()) { - Entry>> stringListEntry = (Entry) var2.next(); - String opcCode = (String) stringListEntry.getKey(); - List> opcItemDtos = (List) stringListEntry.getValue(); - ((OpcEntity) opcCodeOpcEntityMapping.computeIfAbsent(opcCode, OpcEntity::new)).reload(opcItemDtos); - } - } catch (Exception var6) { - var6.printStackTrace(); - } finally { - canRefreshOpcEntity = true; - } - - }, (String) null); + while (true) { + Thread.sleep(3000L); } } } - private void logMessage(String errorMessage) { - try { -// issueLogger.setResource(OpcConfig.resource_code, OpcConfig.resource_name).setError(StringUtl.getString(100), "设备同步通信异常").log(errorMessage, new Object[0]); -// businessLogger.setResource(OpcConfig.resource_code, OpcConfig.resource_name).setError(StringUtl.getString(100), "设备同步通信异常").log(errorMessage, new Object[0]); - } catch (Exception var5) { - var5.printStackTrace(); - } - - } - + @Override public void after() { - OpcStartTag.is_run = false; - opcCodeOpcEntityMapping.values().forEach((opcEntity) -> { - opcEntity.cleanUdwCache(); - OpcServerService opcServerService = SpringContextHolder.getBean(OpcServerService.class); - opcServerService.cleanGroups(opcEntity.getOpcCode()); - }); - opcCodeOpcEntityMapping = new ConcurrentHashMap(); - itemCodeOpcItemDtoMapping = new ConcurrentHashMap(); - executorService.shutdownNow(); - } - - private void logItemChanged(String itemCode, UnifiedDataAccessor udw, Object value, OpcItemDto itemDto) { - Object his = udw.getValue(itemCode); - List relate_items = itemDto.getRelate_items(); - if (relate_items != null && !relate_items.isEmpty()) { - StringBuilder sb = new StringBuilder(); - Iterator var8 = relate_items.iterator(); - - while (var8.hasNext()) { - String relate = (String) var8.next(); - Object obj = udw.getValue(relate); - sb.append("key:").append(relate).append("value:").append(obj).append(";"); - } - if (!itemCode.endsWith("heartbeat") && !itemCode.endsWith("time")) { - log.warn("{} 信号 {} 发生变更 {} -> {} 信号快照 {}", itemDto.getDevice_code(), itemCode, his, value, sb); - lucene.deviceExecuteLog(new LuceneLogDto(itemDto.getOpc_server_code(), itemDto.getOpc_plc_code(), itemDto.getDevice_code(), itemDto.getItem_code().substring(itemDto.getItem_code().lastIndexOf(".") + 1), String.valueOf(his), String.valueOf(value))); - } - - } else { - if (!itemCode.endsWith("heartbeat") && !itemCode.endsWith("time")) { - log.warn("{} 信号 {} 发生变更 {} -> {}", itemDto.getDevice_code(), itemCode, his, value); - lucene.deviceExecuteLog(new LuceneLogDto(itemDto.getOpc_server_code(), itemDto.getOpc_plc_code(), itemDto.getDevice_code(), itemDto.getItem_code().substring(itemDto.getItem_code().lastIndexOf(".") + 1), String.valueOf(his), String.valueOf(value))); - } - } - } - - static { - udw = UnifiedDataAccessorFactory.getAccessor(OpcConfig.udw_opc_value_key); - canReadOpcValues = new ConcurrentHashMap(); - opcCodeOpcEntityMapping = new ConcurrentHashMap(); + isRun = false; + this.executorService.shutdownNow(); + this.executorService = Executors.newCachedThreadPool(); } } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/opc/OpcEntity.java b/acs/nladmin-system/src/main/java/org/nl/acs/opc/OpcEntity.java index 8d79969..8dedd10 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/opc/OpcEntity.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/opc/OpcEntity.java @@ -13,163 +13,163 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; public class OpcEntity { - OpcServerService opcServerService = SpringContextHolder.getBean(OpcServerService.class); - private final UnifiedDataAccessor udw; - private Map> items; - private Map> someFailDevices; - private String opcCode; - - public OpcEntity(String opcCode) { - this.udw = UnifiedDataAccessorFactory.getAccessor(OpcConfig.udw_opc_value_key); - this.items = new ConcurrentHashMap(); - this.someFailDevices = new ConcurrentHashMap(); - this.opcCode = opcCode; - } - - public void reload(List> opcItemDtos) { - Map> itemCodes = new ConcurrentHashMap(); - (opcItemDtos.stream().flatMap(Collection::stream).collect(Collectors.groupingBy(OpcItemDto::getDevice_code))).forEach((deviceCodes, opcItemDtoList) -> { - itemCodes.put(deviceCodes, opcItemDtoList.stream().map(OpcItemDto::getItem_code).collect(Collectors.toList())); - }); - DeviceOpcSynchronizeAutoRun.itemCodeOpcItemDtoMapping.putAll((Map)opcItemDtos.stream().flatMap(Collection::stream).collect(Collectors.toMap(OpcItemDto::getItem_code, (obj) -> { - return obj; - },(k, v) -> k))); - if (this.items.size() == 0) { - itemCodes.values().stream().flatMap(Collection::stream).forEach((key) -> { - this.udw.setValue(key, (Object)null); - }); - this.addItemsIntoGroup(itemCodes); - } else { - if (this.someFailDevices.size() > 0) { - this.reAddDevices(); - } - - } - } - - private void reAddDevices() { - Map> addItems = new ConcurrentHashMap(); - StringBuilder err_message = new StringBuilder(); - this.someFailDevices.forEach((deviceCode, itemCodesList) -> { - itemCodesList.forEach((itemCode) -> { - try { - Group group = DeviceOpcSynchronizeAutoRun.getGroup(this.opcCode); - ((List)addItems.computeIfAbsent(deviceCode, (key) -> { - return new ArrayList(); - })).add(group.addItem(itemCode)); - } catch (Exception var6) { - err_message.append(itemCode).append(" 添加失败; "); - } - - }); - List deviceItems = (List)addItems.get(deviceCode); - if (deviceItems != null && deviceItems.size() == itemCodesList.size()) { - this.someFailDevices.remove(deviceCode); - } else if (itemCodesList.size() == 0) { - addItems.remove(deviceCode); - } else { - assert deviceItems != null; - - ((List)this.someFailDevices.get(deviceCode)).removeAll(deviceItems); - } - - synchronized(this.opcCode.intern()) { - this.items.putAll(addItems); - } - - if (err_message.length() > 0) { - String errMsg = err_message.toString(); - //this.log.warn("{}:{}", com.wxzd.wcs.opc.OpcConfig.resource_code, errMsg); - } - - }); - } - - private void addItemsIntoGroup(Map> itemCodes) { - try { - Group group = DeviceOpcSynchronizeAutoRun.getGroup(this.opcCode); - StringBuilder err_message = new StringBuilder(); - Map> items = new ConcurrentHashMap(); - itemCodes.forEach((deviceCode, itemCodesList) -> { - itemCodesList.forEach((itemCode) -> { - try { - ((List)items.computeIfAbsent(deviceCode, (key) -> { - return new ArrayList(); - })).add(group.addItem(itemCode)); - } catch (Exception var7) { - ((List)this.someFailDevices.computeIfAbsent(deviceCode, (key) -> { - return new ArrayList(); - })).add(itemCode); - this.udw.setValue(itemCode, (Object)null); - err_message.append(itemCode).append(" 添加失败; "); - } - - }); - List deviceItems = (List)items.get(deviceCode); - if (deviceItems != null && deviceItems.size() != itemCodesList.size()) { - items.remove(deviceCode); - this.someFailDevices.put(deviceCode, itemCodesList); - } - - }); - synchronized(this.opcCode.intern()) { - this.items = items; - } - - if (err_message.length() > 0) { - String errMsg = err_message.toString(); -// this.log.warn("{}:{}", OpcConfig.resource_code, errMsg); - } - } catch (Exception var8) { - var8.printStackTrace(); - } - - } - - public void cleanUdwCache() { - this.items.values().stream().flatMap(Collection::stream).map(Item::getId).forEach((key) -> { - this.udw.setValue(key, (Object)null); - }); - } - - public Map readAll() throws Exception { - return opcServerService.getServer(this.opcCode).read(true, (Item[])this.items.values().stream().flatMap(Collection::stream).toArray((x$0) -> { - return new Item[x$0]; - })); - } - - public Map readDividually() { - Map result = new HashMap(); - CompletableFuture[] futures = (CompletableFuture[])this.items.entrySet().stream().map((entry) -> { - return CompletableFuture.runAsync(() -> { - try { - Group group = DeviceOpcSynchronizeAutoRun.getGroup(this.opcCode); - result.putAll(group.read(true, (Item[])((List)entry.getValue()).toArray(new Item[0]))); - } catch (Exception var5) { - String deviceCode = (String)entry.getKey(); - // to do -// this.someFailDevices.put(deviceCode, ((List)entry.getValue()).stream().map(Item::getId).collect(Collectors.toList())); - this.items.remove(deviceCode); - } - - }, DeviceOpcSynchronizeAutoRun.executorService); - }).toArray((x$0) -> { - return new CompletableFuture[x$0]; - }); - CompletableFuture.allOf(futures).join(); - return result; - } - - - public UnifiedDataAccessor getUdw() { - return this.udw; - } - - public Map> getItems() { - return this.items; - } - - public String getOpcCode() { - return this.opcCode; - } +// OpcServerService opcServerService = SpringContextHolder.getBean(OpcServerService.class); +// private final UnifiedDataAccessor udw; +// private Map> items; +// private Map> someFailDevices; +// private String opcCode; +// +// public OpcEntity(String opcCode) { +// this.udw = UnifiedDataAccessorFactory.getAccessor(OpcConfig.udw_opc_value_key); +// this.items = new ConcurrentHashMap(); +// this.someFailDevices = new ConcurrentHashMap(); +// this.opcCode = opcCode; +// } +// +// public void reload(List> opcItemDtos) { +// Map> itemCodes = new ConcurrentHashMap(); +// (opcItemDtos.stream().flatMap(Collection::stream).collect(Collectors.groupingBy(OpcItemDto::getDevice_code))).forEach((deviceCodes, opcItemDtoList) -> { +// itemCodes.put(deviceCodes, opcItemDtoList.stream().map(OpcItemDto::getItem_code).collect(Collectors.toList())); +// }); +// DeviceOpcSynchronizeAutoRun.itemCodeOpcItemDtoMapping.putAll((Map)opcItemDtos.stream().flatMap(Collection::stream).collect(Collectors.toMap(OpcItemDto::getItem_code, (obj) -> { +// return obj; +// },(k, v) -> k))); +// if (this.items.size() == 0) { +// itemCodes.values().stream().flatMap(Collection::stream).forEach((key) -> { +// this.udw.setValue(key, (Object)null); +// }); +// this.addItemsIntoGroup(itemCodes); +// } else { +// if (this.someFailDevices.size() > 0) { +// this.reAddDevices(); +// } +// +// } +// } +// +// private void reAddDevices() { +// Map> addItems = new ConcurrentHashMap(); +// StringBuilder err_message = new StringBuilder(); +// this.someFailDevices.forEach((deviceCode, itemCodesList) -> { +// itemCodesList.forEach((itemCode) -> { +// try { +// Group group = DeviceOpcSynchronizeAutoRun.getGroup(this.opcCode); +// ((List)addItems.computeIfAbsent(deviceCode, (key) -> { +// return new ArrayList(); +// })).add(group.addItem(itemCode)); +// } catch (Exception var6) { +// err_message.append(itemCode).append(" 添加失败; "); +// } +// +// }); +// List deviceItems = (List)addItems.get(deviceCode); +// if (deviceItems != null && deviceItems.size() == itemCodesList.size()) { +// this.someFailDevices.remove(deviceCode); +// } else if (itemCodesList.size() == 0) { +// addItems.remove(deviceCode); +// } else { +// assert deviceItems != null; +// +// ((List)this.someFailDevices.get(deviceCode)).removeAll(deviceItems); +// } +// +// synchronized(this.opcCode.intern()) { +// this.items.putAll(addItems); +// } +// +// if (err_message.length() > 0) { +// String errMsg = err_message.toString(); +// //this.log.warn("{}:{}", com.wxzd.wcs.opc.OpcConfig.resource_code, errMsg); +// } +// +// }); +// } +// +// private void addItemsIntoGroup(Map> itemCodes) { +// try { +// Group group = DeviceOpcSynchronizeAutoRun.getGroup(this.opcCode); +// StringBuilder err_message = new StringBuilder(); +// Map> items = new ConcurrentHashMap(); +// itemCodes.forEach((deviceCode, itemCodesList) -> { +// itemCodesList.forEach((itemCode) -> { +// try { +// ((List)items.computeIfAbsent(deviceCode, (key) -> { +// return new ArrayList(); +// })).add(group.addItem(itemCode)); +// } catch (Exception var7) { +// ((List)this.someFailDevices.computeIfAbsent(deviceCode, (key) -> { +// return new ArrayList(); +// })).add(itemCode); +// this.udw.setValue(itemCode, (Object)null); +// err_message.append(itemCode).append(" 添加失败; "); +// } +// +// }); +// List deviceItems = (List)items.get(deviceCode); +// if (deviceItems != null && deviceItems.size() != itemCodesList.size()) { +// items.remove(deviceCode); +// this.someFailDevices.put(deviceCode, itemCodesList); +// } +// +// }); +// synchronized(this.opcCode.intern()) { +// this.items = items; +// } +// +// if (err_message.length() > 0) { +// String errMsg = err_message.toString(); +//// this.log.warn("{}:{}", OpcConfig.resource_code, errMsg); +// } +// } catch (Exception var8) { +// var8.printStackTrace(); +// } +// +// } +// +// public void cleanUdwCache() { +// this.items.values().stream().flatMap(Collection::stream).map(Item::getId).forEach((key) -> { +// this.udw.setValue(key, (Object)null); +// }); +// } +// +// public Map readAll() throws Exception { +// return opcServerService.getServer(this.opcCode).read(true, (Item[])this.items.values().stream().flatMap(Collection::stream).toArray((x$0) -> { +// return new Item[x$0]; +// })); +// } +// +// public Map readDividually() { +// Map result = new HashMap(); +// CompletableFuture[] futures = (CompletableFuture[])this.items.entrySet().stream().map((entry) -> { +// return CompletableFuture.runAsync(() -> { +// try { +// Group group = DeviceOpcSynchronizeAutoRun.getGroup(this.opcCode); +// result.putAll(group.read(true, (Item[])((List)entry.getValue()).toArray(new Item[0]))); +// } catch (Exception var5) { +// String deviceCode = (String)entry.getKey(); +// // to do +//// this.someFailDevices.put(deviceCode, ((List)entry.getValue()).stream().map(Item::getId).collect(Collectors.toList())); +// this.items.remove(deviceCode); +// } +// +// }, DeviceOpcSynchronizeAutoRun.executorService); +// }).toArray((x$0) -> { +// return new CompletableFuture[x$0]; +// }); +// CompletableFuture.allOf(futures).join(); +// return result; +// } +// +// +// public UnifiedDataAccessor getUdw() { +// return this.udw; +// } +// +// public Map> getItems() { +// return this.items; +// } +// +// public String getOpcCode() { +// return this.opcCode; +// } }