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 2020/12/10 12:12:27 UTC

[plc4x] branch bug/driver-opcua-read-arrays updated: [BROKEN] Last failed attempt at working around missing datatype. :(

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

hutcheb pushed a commit to branch bug/driver-opcua-read-arrays
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/bug/driver-opcua-read-arrays by this push:
     new 3da8806  [BROKEN] Last failed attempt at working around missing datatype. :(
3da8806 is described below

commit 3da8806c28830c6af9707681ab165cbb0af97828
Author: hutcheb <be...@gmail.com>
AuthorDate: Thu Dec 10 07:11:36 2020 -0500

    [BROKEN] Last failed attempt at working around missing datatype. :(
---
 .../opcua/connection/OpcuaTcpPlcConnection.java    |  42 ++++++-
 .../apache/plc4x/java/opcua/ManualPLC4XOpcua.java  |  39 ++++++-
 .../plc4x/java/opcua/OpcuaPlcDriverTest.java       | 123 ++++++++++++++++++---
 3 files changed, 180 insertions(+), 24 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 6bc566a..ac05854 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
@@ -47,6 +47,7 @@ import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy;
 import org.eclipse.milo.opcua.stack.core.types.builtin.*;
 import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger;
 import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UShort;
+import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UByte;
 import org.eclipse.milo.opcua.stack.core.types.enumerated.MonitoringMode;
 import org.eclipse.milo.opcua.stack.core.types.enumerated.TimestampsToReturn;
 import org.eclipse.milo.opcua.stack.core.types.structured.*;
@@ -54,6 +55,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.math.BigInteger;
+import java.math.BigDecimal;
+import java.util.stream.Collectors;
 import java.net.InetAddress;
 import java.time.Duration;
 import java.util.*;
@@ -113,7 +116,7 @@ public class OpcuaTcpPlcConnection extends BaseOpcuaPlcConnection {
 
     public static PlcValue encodePlcValue(DataValue value) {
         ExpandedNodeId typeNode = value.getValue().getDataType().get();
-        Object objValue = value.getValue().getValue();        
+        Object objValue = value.getValue().getValue();
 
         if (objValue.getClass().isArray()) {
             Object[] objArray = (Object[]) objValue;
@@ -541,8 +544,41 @@ public class OpcuaTcpPlcConnection extends BaseOpcuaPlcConnection {
                 Object valueObject = writeRequest.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);
+                Variant var = null;
+                if (valueObject instanceof ArrayList) {
+                    List<PlcValue> plcValueList = (List<PlcValue>) valueObject;
+                    if (plcValueList.get(0) instanceof PlcBOOL) {
+                        List<Boolean> valueList = (plcValueList).stream().map(x -> ((PlcBOOL) x).getBoolean()).collect(Collectors.toList());
+                        var = new Variant(valueList.toArray(new Boolean[valueList.size()]));
+                    } else if (plcValueList.get(0) instanceof PlcSINT) {
+                        List<UByte> valueList = (List<UByte>) (plcValueList).stream().map(x -> UByte.valueOf(((PlcSINT) x).getByte())).collect(Collectors.toList());
+                        var = new Variant(valueList.toArray(new UByte[valueList.size()]));
+                    } else if (plcValueList.get(0) instanceof PlcINT) {
+                        List<Short> valueList = (plcValueList).stream().map(x -> ((PlcINT) x).getShort()).collect(Collectors.toList());
+                        var = new Variant(valueList.toArray(new Short[valueList.size()]));
+                    } else if (plcValueList.get(0) instanceof PlcDINT) {
+                        List<Integer> valueList = (plcValueList).stream().map(x -> ((PlcDINT) x).getInteger()).collect(Collectors.toList());
+                        var = new Variant(valueList.toArray(new Integer[valueList.size()]));
+                    } else if (plcValueList.get(0) instanceof PlcLINT) {
+                        List<Long> valueList = (plcValueList).stream().map(x -> ((PlcLINT) x).getLong()).collect(Collectors.toList());
+                        var = new Variant(valueList.toArray(new Long[valueList.size()]));
+                    } else if (plcValueList.get(0) instanceof PlcREAL) {
+                        List<Float> valueList = (plcValueList).stream().map(x -> ((PlcREAL) x).getFloat()).collect(Collectors.toList());
+                        var = new Variant(valueList.toArray(new Float[valueList.size()]));
+                    } else if (plcValueList.get(0) instanceof PlcLREAL) {
+                        List<Double> valueList = (plcValueList).stream().map(x -> ((PlcLREAL) x).getDouble()).collect(Collectors.toList());
+                        var = new Variant(valueList.toArray(new Double[valueList.size()]));
+                    } else if (plcValueList.get(0) instanceof PlcSTRING) {
+                        List<String> valueList = (plcValueList).stream().map(x -> ((PlcSTRING) x).getString()).collect(Collectors.toList());
+                        var = new Variant(valueList.toArray(new String[valueList.size()]));
+                    } else {
+                        logger.warn("Unsupported data type : {}", plcValueList.get(0).getClass());
+                    }
+                }   else {
+                    var = new Variant(valueObject);
+                }
+
+                DataValue value = new DataValue(var);
                 ids.add(idNode);
                 names.add(fieldName);
                 values.add(value);
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 edc3614..6407b42 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
@@ -63,6 +63,25 @@ public class ManualPLC4XOpcua {
     private static final String UINT32_IDENTIFIER = "ns=2;s=HelloWorld/ScalarTypes/UInt32";
     private static final String UINT64_IDENTIFIER = "ns=2;s=HelloWorld/ScalarTypes/UInt64";
     private static final String UINTEGER_IDENTIFIER = "ns=2;s=HelloWorld/ScalarTypes/UInteger";
+
+    //Arrays
+    private static final String BOOL_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/BooleanArray";
+    private static final String BYTE_STRING_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/ByteStringArray";
+    private static final String BYTE_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/ByteArray";
+    private static final String DOUBLE_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/DoubleArray";
+    private static final String FLOAT_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/FloatArray";
+    private static final String INT16_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/Int16Array";
+    private static final String INT32_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/Int32Array";
+    private static final String INT64_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/Int64Array";
+    private static final String INTEGER_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/IntegerArray";
+    private static final String SBYTE_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/SByteArray";
+    private static final String STRING_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/StringArray";
+    private static final String UINT16_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/UInt16Array";
+    private static final String UINT32_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/UInt32Array";
+    private static final String UINT64_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/UInt64Array";
+    private static final String UINTEGER_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/UIntegerArray";
+
+    //Don't exists
     private static final String DOES_NOT_EXIST_IDENTIFIER = "ns=2;i=12512623";
 
     public static void main(String args[]) {
@@ -78,7 +97,7 @@ public class ManualPLC4XOpcua {
         PlcField field = fieldH.createField(BOOL_IDENTIFIER);
         try {
             opcuaConnection = (OpcuaTcpPlcConnection)
-                new PlcDriverManager().getConnection("opcua:tcp://127.0.0.1:12686/milo?discovery=false");
+                new PlcDriverManager().getConnection("opcua:tcp://127.0.0.1:12685/milo?discovery=false");
 
         } catch (PlcConnectionException e) {
             e.printStackTrace();
@@ -105,6 +124,22 @@ public class ManualPLC4XOpcua {
             builder.addItem("UInt64", UINT64_IDENTIFIER);
             builder.addItem("UInteger", UINTEGER_IDENTIFIER);
 
+            builder.addItem("BoolArray", BOOL_ARRAY_IDENTIFIER);
+            builder.addItem("ByteStringArray", BYTE_STRING_ARRAY_IDENTIFIER);
+            builder.addItem("ByteArray", BYTE_ARRAY_IDENTIFIER);
+            builder.addItem("DoubleArray", DOUBLE_ARRAY_IDENTIFIER);
+            builder.addItem("FloatArray", FLOAT_ARRAY_IDENTIFIER);
+            builder.addItem("Int16Array", INT16_ARRAY_IDENTIFIER);
+            builder.addItem("Int32Array", INT32_ARRAY_IDENTIFIER);
+            builder.addItem("Int64Array", INT64_ARRAY_IDENTIFIER);
+            builder.addItem("IntegerArray", INTEGER_ARRAY_IDENTIFIER);
+            builder.addItem("SByteArray", SBYTE_ARRAY_IDENTIFIER);
+            builder.addItem("StringArray", STRING_ARRAY_IDENTIFIER);
+            builder.addItem("UInt16Array", UINT16_ARRAY_IDENTIFIER);
+            builder.addItem("UInt32Array", UINT32_ARRAY_IDENTIFIER);
+            builder.addItem("UInt64Array", UINT64_ARRAY_IDENTIFIER);
+            builder.addItem("UIntegerArray", UINTEGER_ARRAY_IDENTIFIER);
+
             builder.addItem("DoesNotExists", DOES_NOT_EXIST_IDENTIFIER);
 
             PlcReadRequest request = builder.build();
@@ -197,5 +232,3 @@ public class ManualPLC4XOpcua {
         }
     }
 }
-
-
diff --git a/plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/OpcuaPlcDriverTest.java b/plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/OpcuaPlcDriverTest.java
index e30438d..8ce7f62 100644
--- a/plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/OpcuaPlcDriverTest.java
+++ b/plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/OpcuaPlcDriverTest.java
@@ -32,6 +32,8 @@ import org.eclipse.milo.examples.server.ExampleServer;
 import org.junit.jupiter.api.*;
 
 import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -40,9 +42,16 @@ import static org.apache.plc4x.java.opcua.OpcuaPlcDriver.OPCUA_URI_PATTERN;
 import static org.apache.plc4x.java.opcua.UtilsTest.assertMatching;
 import static org.assertj.core.api.Assertions.fail;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /**
  */
 public class OpcuaPlcDriverTest {
+
+    private static final Logger logger = LoggerFactory.getLogger(OpcuaPlcDriverTest.class);
+
+
     // Read only variables of milo example server of version 3.6
     private static final String BOOL_IDENTIFIER_READ_WRITE = "ns=2;s=HelloWorld/ScalarTypes/Boolean";
     private static final String BYTE_IDENTIFIER_READ_WRITE = "ns=2;s=HelloWorld/ScalarTypes/Byte";
@@ -59,6 +68,7 @@ public class OpcuaPlcDriverTest {
     private static final String UINT64_IDENTIFIER_READ_WRITE = "ns=2;s=HelloWorld/ScalarTypes/UInt64";
     private static final String UINTEGER_IDENTIFIER_READ_WRITE = "ns=2;s=HelloWorld/ScalarTypes/UInteger";
     private static final String DOES_NOT_EXIST_IDENTIFIER_READ_WRITE = "ns=2;i=12512623";
+
     // At the moment not used in PLC4X or in the OPC UA driver
     private static final String BYTE_STRING_IDENTIFIER_READ_WRITE = "ns=2;s=HelloWorld/ScalarTypes/ByteString";
     private static final String DATE_TIME_READ_WRITE = "ns=2;s=HelloWorld/ScalarTypes/DateTime";
@@ -70,6 +80,25 @@ public class OpcuaPlcDriverTest {
     private static final String UTC_TIME_READ_WRITE = "ns=2;s=HelloWorld/ScalarTypes/UtcTime";
     private static final String VARIANT_READ_WRITE = "ns=2;s=HelloWorld/ScalarTypes/Variant";
     private static final String XML_ELEMENT_READ_WRITE = "ns=2;s=HelloWorld/ScalarTypes/XmlElement";
+
+    //Arrays
+    private static final String BOOL_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/BooleanArray";
+    private static final String BYTE_STRING_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/ByteStringArray";
+    private static final String BYTE_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/ByteArray";
+    private static final String DOUBLE_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/DoubleArray";
+    private static final String FLOAT_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/FloatArray";
+    private static final String INT16_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/Int16Array";
+    private static final String INT32_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/Int32Array";
+    private static final String INT64_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/Int64Array";
+    private static final String INTEGER_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/IntegerArray";
+    private static final String SBYTE_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/SByteArray";
+    private static final String STRING_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/StringArray";
+    private static final String UINT16_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/UInt16Array";
+    private static final String UINT32_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/UInt32Array";
+    private static final String UINT64_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/UInt64Array";
+    private static final String UINTEGER_ARRAY_IDENTIFIER = "ns=2;s=HelloWorld/ArrayTypes/UIntegerArray";
+
+
     // Address of local milo server
     private String miloLocalAddress = "127.0.0.1:12686/milo";
     //Tcp pattern of OPC UA
@@ -177,6 +206,21 @@ public class OpcuaPlcDriverTest {
             builder.addItem("UInt64", UINT64_IDENTIFIER_READ_WRITE);
             builder.addItem("UInteger", UINTEGER_IDENTIFIER_READ_WRITE);
 
+            builder.addItem("BoolArray", BOOL_ARRAY_IDENTIFIER);
+            builder.addItem("ByteStringArray", BYTE_STRING_ARRAY_IDENTIFIER);
+            builder.addItem("ByteArray", BYTE_ARRAY_IDENTIFIER);
+            builder.addItem("DoubleArray", DOUBLE_ARRAY_IDENTIFIER);
+            builder.addItem("FloatArray", FLOAT_ARRAY_IDENTIFIER);
+            builder.addItem("Int16Array", INT16_ARRAY_IDENTIFIER);
+            builder.addItem("Int32Array", INT32_ARRAY_IDENTIFIER);
+            builder.addItem("Int64Array", INT64_ARRAY_IDENTIFIER);
+            builder.addItem("SByteArray", SBYTE_ARRAY_IDENTIFIER);
+            builder.addItem("StringArray", STRING_ARRAY_IDENTIFIER);
+            builder.addItem("UInt16Array", UINT16_ARRAY_IDENTIFIER);
+            builder.addItem("UInt32Array", UINT32_ARRAY_IDENTIFIER);
+            builder.addItem("UInt64Array", UINT64_ARRAY_IDENTIFIER);
+            builder.addItem("UIntegerArray", UINTEGER_ARRAY_IDENTIFIER);
+
             builder.addItem("DoesNotExists", DOES_NOT_EXIST_IDENTIFIER_READ_WRITE);
 
             PlcReadRequest request = builder.build();
@@ -196,6 +240,19 @@ public class OpcuaPlcDriverTest {
             assert response.getResponseCode("UInt64").equals(PlcResponseCode.OK);
             assert response.getResponseCode("UInteger").equals(PlcResponseCode.OK);
 
+            assert response.getResponseCode("BoolArray").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("ByteArray").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("DoubleArray").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("FloatArray").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("Int16Array").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("Int32Array").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("Int64Array").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("SByteArray").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("StringArray").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("UInt16Array").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("UInt32Array").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("UInt64Array").equals(PlcResponseCode.OK);
+
             assert response.getResponseCode("DoesNotExists").equals(PlcResponseCode.NOT_FOUND);
 
             opcuaConnection.close();
@@ -212,40 +269,70 @@ public class OpcuaPlcDriverTest {
             assert opcuaConnection.isConnected();
 
             PlcWriteRequest.Builder builder = opcuaConnection.writeRequestBuilder();
-            builder.addItem("Bool", BOOL_IDENTIFIER_READ_WRITE, true);
+//            builder.addItem("Bool", BOOL_IDENTIFIER_READ_WRITE, true);
 //            builder.addItem("Byte", BYTE_IDENTIFIER_READ_WRITE);
-            builder.addItem("Double", DOUBLE_IDENTIFIER_READ_WRITE, 0.5d);
-            builder.addItem("Float", FLOAT_IDENTIFIER_READ_WRITE, 0.5f);
+//            builder.addItem("Double", DOUBLE_IDENTIFIER_READ_WRITE, 0.5d);
+//            builder.addItem("Float", FLOAT_IDENTIFIER_READ_WRITE, 0.5f);
 //            builder.addItem("Int16", INT16_IDENTIFIER_READ_WRITE);
-            builder.addItem("Int32", INT32_IDENTIFIER_READ_WRITE, 42);
-            builder.addItem("Int64", INT64_IDENTIFIER_READ_WRITE, 42L);
-            builder.addItem("Integer", INTEGER_IDENTIFIER_READ_WRITE, 42);
+//            builder.addItem("Int32", INT32_IDENTIFIER_READ_WRITE, 42);
+//            builder.addItem("Int64", INT64_IDENTIFIER_READ_WRITE, 42L);
+//            builder.addItem("Integer", INTEGER_IDENTIFIER_READ_WRITE, 42);
 //            builder.addItem("SByte", SBYTE_IDENTIFIER_READ_WRITE);
-            builder.addItem("String", STRING_IDENTIFIER_READ_WRITE, "Helllo Toddy!");
+//            builder.addItem("String", STRING_IDENTIFIER_READ_WRITE, "Helllo Toddy!");
 //            builder.addItem("UInt16", UINT16_IDENTIFIER_READ_WRITE);
 //            builder.addItem("UInt32", UINT32_IDENTIFIER_READ_WRITE);
-            builder.addItem("UInt64", UINT64_IDENTIFIER_READ_WRITE, new BigInteger("1337"));
+//            builder.addItem("UInt64", UINT64_IDENTIFIER_READ_WRITE, new BigInteger("1337"));
 //            builder.addItem("UInteger", UINTEGER_IDENTIFIER_READ_WRITE);
 
-//            builder.addItem("DoesNotExists", DOES_NOT_EXIST_IDENTIFIER_READ_WRITE);
+
+              builder.addItem("BooleanArray", BOOL_ARRAY_IDENTIFIER, new Boolean[] {true, true, true, true, true});
+              builder.addItem("ByteArray", BYTE_ARRAY_IDENTIFIER, new Byte[] {1, -100, 100, -123, 123});
+              builder.addItem("DoubleArray", DOUBLE_ARRAY_IDENTIFIER, new Double[] {1.0,2.0,3.0,4.0,5.0});
+              builder.addItem("FloatArray", FLOAT_ARRAY_IDENTIFIER, new Float[] {1.0F,2.0F,3.0F,4.0F,5.0F});
+              builder.addItem("Int16Array", INT16_ARRAY_IDENTIFIER, new Short[] {1,2,3,4,5});
+              builder.addItem("Int32Array", INT32_ARRAY_IDENTIFIER, new Integer[] {1,2,3,4,5});
+              builder.addItem("Int64Array", INT64_ARRAY_IDENTIFIER, new Long[] {1L,2L,3L,4L,5L});
+              builder.addItem("IntegerArray", INT32_ARRAY_IDENTIFIER, new Integer[] {1,2,3,4,5});
+              //builder.addItem("SByteArray", SBYTE_ARRAY_IDENTIFIER, new Byte[] {1,2,3,4,5});
+              builder.addItem("StringArray", STRING_ARRAY_IDENTIFIER, new String[] {"1","2","3","4","5"});
+
+  //            builder.addItem("DoesNotExists", DOES_NOT_EXIST_IDENTIFIER_READ_WRITE);
 
             PlcWriteRequest request = builder.build();
             PlcWriteResponse response = request.execute().get();
-            assert response.getResponseCode("Bool").equals(PlcResponseCode.OK);
+//            logger.info(response.getResponseCode("Bool").toString());
+//            assert response.getResponseCode("Bool").equals(PlcResponseCode.OK);
 //            assert response.getResponseCode("Byte").equals(PlcResponseCode.OK);
-            assert response.getResponseCode("Double").equals(PlcResponseCode.OK);
-            assert response.getResponseCode("Float").equals(PlcResponseCode.OK);
+//            assert response.getResponseCode("Double").equals(PlcResponseCode.OK);
+//            assert response.getResponseCode("Float").equals(PlcResponseCode.OK);
 //            assert response.getResponseCode("Int16").equals(PlcResponseCode.OK);
-            assert response.getResponseCode("Int32").equals(PlcResponseCode.OK);
-            assert response.getResponseCode("Int64").equals(PlcResponseCode.OK);
-            assert response.getResponseCode("Integer").equals(PlcResponseCode.OK);
+//            assert response.getResponseCode("Int32").equals(PlcResponseCode.OK);
+//            assert response.getResponseCode("Int64").equals(PlcResponseCode.OK);
+//            assert response.getResponseCode("Integer").equals(PlcResponseCode.OK);
 //            assert response.getResponseCode("SByte").equals(PlcResponseCode.OK);
-            assert response.getResponseCode("String").equals(PlcResponseCode.OK);
+//            assert response.getResponseCode("String").equals(PlcResponseCode.OK);
 //            assert response.getResponseCode("UInt16").equals(PlcResponseCode.OK);
 //            assert response.getResponseCode("UInt32").equals(PlcResponseCode.OK);
-            assert response.getResponseCode("UInt64").equals(PlcResponseCode.OK);
+//            assert response.getResponseCode("UInt64").equals(PlcResponseCode.OK);
 //            assert response.getResponseCode("UInteger").equals(PlcResponseCode.OK);
-//
+
+            assert response.getResponseCode("BooleanArray").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("ByteArray").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("DoubleArray").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("FloatArray").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("Int16Array").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("Int32Array").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("Int64Array").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("IntegerArray").equals(PlcResponseCode.OK);
+//            assert response.getResponseCode("SByteArray").equals(PlcResponseCode.OK);
+            assert response.getResponseCode("StringArray").equals(PlcResponseCode.OK);
+//            assert response.getResponseCode("UInt16Array").equals(PlcResponseCode.OK);
+//            assert response.getResponseCode("UInt32Array").equals(PlcResponseCode.OK);
+//            assert response.getResponseCode("UInt64Array").equals(PlcResponseCode.OK);
+//            assert response.getResponseCode("UIntegerArray").equals(PlcResponseCode.OK);
+
+            assert response.getResponseCode("StringArray").equals(PlcResponseCode.OK);
+
 //            assert response.getResponseCode("DoesNotExists").equals(PlcResponseCode.NOT_FOUND);
 
             opcuaConnection.close();