You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by jf...@apache.org on 2020/01/29 12:57:42 UTC
[plc4x] 05/06: [fix] changed write of opc variant and included cast
from BigInteger
This is an automated email from the ASF dual-hosted git repository.
jfeinauer pushed a commit to branch fixes-mathi
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 46f0075640a85195095448a82f2190191f7e6c0b
Author: Matthias Milan Strljic <Ma...@googlemail.com>
AuthorDate: Wed Jan 29 00:04:57 2020 +0100
[fix] changed write of opc variant and included cast from BigInteger
Signed-off-by: Matthias Milan Strljic <Ma...@googlemail.com>
Signed-off-by: Matthias Milan Strljic <Ma...@googlemail.com>
---
.../plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java | 10 ++++++++--
.../java/org/apache/plc4x/java/opcua/ManualPLC4XOpcua.java | 9 ++++-----
2 files changed, 12 insertions(+), 7 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 ada500c..90ed00c 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
@@ -65,6 +65,7 @@ import java.util.function.Predicate;
import java.util.stream.Collectors;
import static org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.uint;
+import static org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.ulong;
/**
* Corresponding implementaion for a TCP-based connection for an OPC UA server.
@@ -433,8 +434,11 @@ public class OpcuaTcpPlcConnection extends BaseOpcuaPlcConnection {
for (String fieldName : writeRequest.getFieldNames()) {
OpcuaField uaField = (OpcuaField) writeRequest.getField(fieldName);
NodeId idNode = generateNodeId(uaField);
- Variant var = new Variant(internalPlcWriteRequest.getPlcValue(fieldName).getObject());
- DataValue value = new DataValue(var, null, null);
+ Object valueObject = internalPlcWriteRequest.getPlcValue(fieldName).getObject();
+ // Added small work around for handling BigIntegers as input type for UInt64
+ if (valueObject instanceof BigInteger) valueObject = ulong((BigInteger) valueObject);
+ Variant var = new Variant(valueObject);
+ DataValue value = new DataValue(var, null, null, null);
ids.add(idNode);
names.add(fieldName);
values.add(value);
@@ -458,6 +462,8 @@ public class OpcuaTcpPlcConnection extends BaseOpcuaPlcConnection {
resultCode = PlcResponseCode.OK;
} else if (statusCodes.get(counter).isUncertain()) {
resultCode = PlcResponseCode.NOT_FOUND;
+ } else if (statusCodes.get(counter).isBad() && statusCodes.get(counter).getValue() == 2155085824L) {
+ resultCode = PlcResponseCode.INVALID_DATATYPE;
} else {
resultCode = PlcResponseCode.ACCESS_DENIED;
}
diff --git a/plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/ManualPLC4XOpcua.java b/plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/ManualPLC4XOpcua.java
index 57bf76a..d8ed820 100644
--- a/plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/ManualPLC4XOpcua.java
+++ b/plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/ManualPLC4XOpcua.java
@@ -34,7 +34,6 @@ import org.eclipse.milo.examples.server.ExampleServer;
import java.math.BigInteger;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
-import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.function.Consumer;
@@ -110,21 +109,21 @@ public class ManualPLC4XOpcua {
builder.addItem("DoesNotExists", DOES_NOT_EXIST_IDENTIFIER);
PlcReadRequest request = builder.build();
- PlcReadResponse response = opcuaConnection.read(request).get();
+ //PlcReadResponse response = opcuaConnection.read(request).get();
- Collection coll = response.getAllStrings("String");
+ //Collection coll = response.getAllStrings("String");
PlcWriteRequest.Builder wBuilder = opcuaConnection.writeRequestBuilder();
wBuilder.addItem("w-Bool", BOOL_IDENTIFIER, true);
//wBuilder.addItem("w-ByteString", BYTE_STRING_IDENTIFIER, "TEST".getBytes());
- wBuilder.addItem("w-Byte", BYTE_IDENTIFIER, (byte) 1);
+ wBuilder.addItem("w-Byte", BYTE_IDENTIFIER, (byte) 0x00);
wBuilder.addItem("w-Double", DOUBLE_IDENTIFIER, (double) 0.25);
wBuilder.addItem("w-Float", FLOAT_IDENTIFIER, (float) 0.25);
wBuilder.addItem("w-INT16", INT16_IDENTIFIER, (short) 12);
wBuilder.addItem("w-Int32", INT32_IDENTIFIER, (int) 314);
wBuilder.addItem("w-Int64", INT64_IDENTIFIER, (long) 123125);
wBuilder.addItem("w-Integer", INTEGER_IDENTIFIER, (int) 314);
- wBuilder.addItem("w-SByte", SBYTE_IDENTIFIER, (short) 23);
+ wBuilder.addItem("w-SByte", SBYTE_IDENTIFIER, (byte) 23);
wBuilder.addItem("w-String", STRING_IDENTIFIER, "TEST");
wBuilder.addItem("w-UInt16", UINT16_IDENTIFIER, (int) 222);
wBuilder.addItem("w-UInt32", UINT32_IDENTIFIER, (long) 21412);