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);
+ }
}
/**