You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by hu...@apache.org on 2021/03/05 10:02:20 UTC
[plc4x] 01/01: Fix for opcua subscription
This is an automated email from the ASF dual-hosted git repository.
hutcheb pushed a commit to branch bug/opcua_subscription
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 67de5bac87866fb09c82347893333e349968b40a
Author: hutcheb <be...@gmail.com>
AuthorDate: Fri Mar 5 05:01:36 2021 -0500
Fix for opcua subscription
---
.../java/opcua/connection/OpcuaTcpPlcConnection.java | 5 +++--
.../org/apache/plc4x/java/opcua/protocol/OpcuaField.java | 16 +++++++++++++++-
2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java
index 9e06022..5d86d69 100644
--- a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java
+++ b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java
@@ -32,6 +32,7 @@ import org.apache.plc4x.java.opcua.protocol.OpcuaSubsriptionHandle;
import org.apache.plc4x.java.spi.messages.*;
import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
import org.apache.plc4x.java.spi.model.DefaultPlcConsumerRegistration;
+import org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionField;
import org.apache.plc4x.java.spi.values.*;
import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
import org.eclipse.milo.opcua.sdk.client.api.config.OpcUaClientConfig;
@@ -384,8 +385,8 @@ public class OpcuaTcpPlcConnection extends BaseOpcuaPlcConnection {
CompletableFuture<PlcSubscriptionResponse> future = CompletableFuture.supplyAsync(() -> {
Map<String, ResponseItem<PlcSubscriptionHandle>> responseItems = new HashMap<>();
for (String fieldName : subscriptionRequest.getFieldNames()) {
- final PlcSubscriptionField subscriptionField = subscriptionRequest.getField(fieldName);
- final OpcuaField field = (OpcuaField) Objects.requireNonNull(subscriptionField);
+ final DefaultPlcSubscriptionField subscriptionField = (DefaultPlcSubscriptionField) subscriptionRequest.getField(fieldName);
+ final OpcuaField field = (OpcuaField) Objects.requireNonNull(subscriptionField.getPlcField());
long cycleTime = subscriptionField.getDuration().orElse(Duration.ofSeconds(1)).toMillis();
NodeId idNode = generateNodeId(field);
ReadValueId readValueId = new ReadValueId(
diff --git a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaField.java b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaField.java
index f90ffaa..7f186f7 100644
--- a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaField.java
+++ b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaField.java
@@ -21,16 +21,20 @@ package org.apache.plc4x.java.opcua.protocol;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
import org.apache.plc4x.java.api.exceptions.PlcUnsupportedDataTypeException;
import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.model.PlcSubscriptionField;
+import org.apache.plc4x.java.api.types.PlcSubscriptionType;
import org.apache.plc4x.java.opcua.readwrite.types.OpcuaIdentifierType;
import org.apache.plc4x.java.opcua.readwrite.types.OpcuaDataType;
+import java.time.Duration;
import java.util.Objects;
+import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*/
-public class OpcuaField implements PlcField {
+public class OpcuaField implements PlcSubscriptionField {
public static final Pattern ADDRESS_PATTERN = Pattern.compile("^ns=(?<namespace>\\d+);(?<identifierType>[isgb])=((?<identifier>[^:]+))?(:(?<datatype>[a-zA-Z_]+))?");
@@ -135,4 +139,14 @@ public class OpcuaField implements PlcField {
"identifier=" + identifier +
'}';
}
+
+ @Override
+ public PlcSubscriptionType getPlcSubscriptionType() {
+ return null;
+ }
+
+ @Override
+ public Optional<Duration> getDuration() {
+ return Optional.empty();
+ }
}