You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampipes.apache.org by ri...@apache.org on 2022/08/19 12:35:15 UTC

[incubator-streampipes] branch rel/0.70.0 updated: [hotfix] Properly close PLC connection

This is an automated email from the ASF dual-hosted git repository.

riemer pushed a commit to branch rel/0.70.0
in repository https://gitbox.apache.org/repos/asf/incubator-streampipes.git


The following commit(s) were added to refs/heads/rel/0.70.0 by this push:
     new 88e48719b [hotfix] Properly close PLC connection
88e48719b is described below

commit 88e48719b4fa0f4eac174a52c30c812ab74f41a7
Author: Dominik Riemer <do...@gmail.com>
AuthorDate: Fri Aug 19 14:34:17 2022 +0200

    [hotfix] Properly close PLC connection
---
 streampipes-extensions/pom.xml                     |  2 +-
 .../iiot/adapters/plc4x/s7/Plc4xS7Adapter.java     | 35 ++++++++++------------
 2 files changed, 17 insertions(+), 20 deletions(-)

diff --git a/streampipes-extensions/pom.xml b/streampipes-extensions/pom.xml
index d0913cd0b..3e61b41ba 100644
--- a/streampipes-extensions/pom.xml
+++ b/streampipes-extensions/pom.xml
@@ -134,7 +134,7 @@
         <netty.version>4.1.72.Final</netty.version>
         <nimbus-jose-jwt.version>7.9</nimbus-jose-jwt.version>
         <opencsv.version>5.5.2</opencsv.version>
-        <plc4x.version>0.8.0</plc4x.version>
+        <plc4x.version>0.9.1</plc4x.version>
         <protobuf.version>3.16.1</protobuf.version>
         <nats.version>2.11.0</nats.version>
 
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/s7/Plc4xS7Adapter.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/s7/Plc4xS7Adapter.java
index f3e778a32..227054b81 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/s7/Plc4xS7Adapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/s7/Plc4xS7Adapter.java
@@ -55,9 +55,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
 import java.util.stream.Collectors;
 
 public class Plc4xS7Adapter extends PullAdapter implements PlcReadResponseHandler {
@@ -159,6 +157,7 @@ public class Plc4xS7Adapter extends PullAdapter implements PlcReadResponseHandle
                     .build());
             }
 
+            this.before();
             var event = readPlcDataSynchronized();
             var preview = event
               .entrySet()
@@ -171,7 +170,7 @@ public class Plc4xS7Adapter extends PullAdapter implements PlcReadResponseHandle
             guessSchema.setEventPreview(List.of(preview));
 
             return guessSchema;
-        } catch (PlcConnectionException | ExecutionException | InterruptedException | TimeoutException e) {
+        } catch (Exception e) {
             throw new AdapterException(e.getMessage(), e);
         }
     }
@@ -204,17 +203,14 @@ public class Plc4xS7Adapter extends PullAdapter implements PlcReadResponseHandle
     @Override
     protected void pullData() {
         // Create PLC read request
-        try {
-            readPlcData(this);
-        } catch (PlcConnectionException e) {
-            this.LOG.error("Could not establish connection to S7 with ip " + this.ip, e);
-            e.printStackTrace();
+        try(PlcConnection plcConnection = this.driverManager.getConnection("s7://" + this.ip)) {
+            readPlcData(plcConnection, this);
+        } catch (Exception e) {
+            LOG.error("Error while reading from PLC with IP {} ", this.ip, e);
         }
-
     }
 
-    private PlcReadRequest makeReadRequest() throws PlcConnectionException {
-        PlcConnection plcConnection = this.driverManager.getConnection("s7://" + this.ip);
+    private PlcReadRequest makeReadRequest(PlcConnection plcConnection) throws PlcConnectionException {
         PlcReadRequest.Builder builder = plcConnection.readRequestBuilder();
         for (Map<String, String> node : this.nodes) {
             builder.addItem(node.get(PLC_NODE_NAME), node.get(PLC_NODE_NAME) + ":" + node.get(PLC_NODE_TYPE).toUpperCase().replaceAll(" ", "_"));
@@ -222,19 +218,20 @@ public class Plc4xS7Adapter extends PullAdapter implements PlcReadResponseHandle
         return builder.build();
     }
 
-    private void readPlcData(PlcReadResponseHandler handler) throws PlcConnectionException {
-        var readRequest = makeReadRequest();
+    private void readPlcData(PlcConnection plcConnection, PlcReadResponseHandler handler) throws PlcConnectionException {
+        var readRequest = makeReadRequest(plcConnection);
         // Execute the request
         CompletableFuture<? extends PlcReadResponse> asyncResponse = readRequest.execute();
         asyncResponse.whenComplete(handler::onReadResult);
     }
 
-    private Map<String, Object> readPlcDataSynchronized() throws PlcConnectionException, ExecutionException, InterruptedException, TimeoutException, AdapterException {
-        this.before();
-        var readRequest = makeReadRequest();
-        // Execute the request
-        var readResponse = readRequest.execute().get(5000, TimeUnit.MILLISECONDS);
-        return makeEvent(readResponse);
+    private Map<String, Object> readPlcDataSynchronized() throws Exception {
+        try (PlcConnection plcConnection = this.driverManager.getConnection("s7://" + this.ip)) {
+            var readRequest = makeReadRequest(plcConnection);
+            // Execute the request
+            var readResponse = readRequest.execute().get(5000, TimeUnit.MILLISECONDS);
+            return makeEvent(readResponse);
+        }
     }
 
     /**