diff --git a/src/main/java/com/xydl/cac/iec/IecClient.java b/src/main/java/com/xydl/cac/iec/IecClient.java index 458083c..874fdfe 100644 --- a/src/main/java/com/xydl/cac/iec/IecClient.java +++ b/src/main/java/com/xydl/cac/iec/IecClient.java @@ -12,7 +12,6 @@ import java.io.IOException; import java.io.InputStream; import java.net.InetAddress; import java.nio.charset.StandardCharsets; -import java.util.Optional; @Slf4j public class IecClient implements ClientEventListener { @@ -20,7 +19,6 @@ public class IecClient implements ClientEventListener { ClientSap clientSap = new ClientSap(); ClientAssociation clientAssociation = null; ServerModel serverModel; - Urcb urcb = null; public void connect(String host, int port, String apTitle, String xml) throws Exception { InputStream in = IOUtils.toInputStream(xml, StandardCharsets.UTF_8); @@ -66,16 +64,18 @@ public class IecClient implements ClientEventListener { public void enableReporting() throws Exception { if (!CollectionUtils.isEmpty(serverModel.getUrcbs())) { - Optional optional = serverModel.getUrcbs().stream().findAny(); - urcb = optional.get(); - clientAssociation.enableReporting(urcb); + for (Urcb urcb : serverModel.getUrcbs()) { + clientAssociation.enableReporting(urcb); + } } } public void disableReporting() { - if (urcb != null) { + if (!CollectionUtils.isEmpty(serverModel.getUrcbs())) { try { - clientAssociation.disableReporting(urcb); + for (Urcb urcb : serverModel.getUrcbs()) { + clientAssociation.disableReporting(urcb); + } } catch (Exception ignore) { } } diff --git a/src/main/java/com/xydl/cac/iec/IecServer.java b/src/main/java/com/xydl/cac/iec/IecServer.java index 34be53f..d0d13d3 100644 --- a/src/main/java/com/xydl/cac/iec/IecServer.java +++ b/src/main/java/com/xydl/cac/iec/IecServer.java @@ -38,10 +38,12 @@ public class IecServer implements ServerEventListener { public void updateBda(BasicDataAttribute bda) { BasicDataAttribute node = (BasicDataAttribute) serversServerModel.findModelNode(bda.getReference(), bda.getFc()); - node.setValueFrom(bda); - List bdas = new ArrayList<>(); - bdas.add(node); - serverSap.setValues(bdas); + if (node != null) { + node.setValueFrom(bda); + List bdas = new ArrayList<>(); + bdas.add(node); + serverSap.setValues(bdas); + } } @Override diff --git a/src/main/java/com/xydl/cac/service/impl/RealTimeServiceImpl.java b/src/main/java/com/xydl/cac/service/impl/RealTimeServiceImpl.java index f3c329a..074a1b1 100644 --- a/src/main/java/com/xydl/cac/service/impl/RealTimeServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/RealTimeServiceImpl.java @@ -45,9 +45,10 @@ public class RealTimeServiceImpl implements RealTimeService { IecClient iecClient = new IecClient(); iecClient.connect(ied.getIp(), 102, ied.getApTitle(), icdFile.getXml()); iecClient.enableReporting(); + log.info("61850订阅成功, ied=" + ied.getName() + ", ip=" + ied.getIp()); clientMap.put(ied.getIp(), iecClient); } catch (Exception ex) { - log.error("61850连接异常, ied=" + ied.getName() + ", ip=" + ied.getIp(), ex); + log.error("61850订阅异常, ied=" + ied.getName() + ", ip=" + ied.getIp(), ex); } } }