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

cdutz pushed a commit to branch fix/opc-ua-fine-tuning
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/fix/opc-ua-fine-tuning by this 
push:
     new cc9d443478 chore: Got all array tests passing too.
cc9d443478 is described below

commit cc9d443478e8fa7cd4270381cc13110e65aa7602
Author: Christofer Dutz <[email protected]>
AuthorDate: Fri Feb 13 14:44:52 2026 +0100

    chore: Got all array tests passing too.
---
 .../java/opcua/protocol/OpcuaProtocolLogic.java    | 284 ++++++++++-----------
 .../java/opcua/ManualS71500NewFWDriverTest.java    | 144 +++++------
 2 files changed, 201 insertions(+), 227 deletions(-)

diff --git 
a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaProtocolLogic.java
 
b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaProtocolLogic.java
index 887c5497ca..5a459a4216 100644
--- 
a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaProtocolLogic.java
+++ 
b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaProtocolLogic.java
@@ -311,232 +311,206 @@ public class OpcuaProtocolLogic extends 
Plc4xProtocolBase<OpcuaAPU> implements H
         PlcValue value = null;
         if (variant instanceof VariantBoolean) {
             byte[] array = ((VariantBoolean) variant).getValue();
-            if (array.length == 1) {
-                value = new PlcBOOL(array[0] != 0);
-            } else {
-                List<PlcValue> values = new ArrayList<>(array.length);
-                for (byte b : array) {
-                    values.add(new PlcBOOL(b != 0));
-                }
-                value = new PlcList(values);
+            List<PlcValue> values = new ArrayList<>(array.length);
+            for (byte b : array) {
+                values.add(new PlcBOOL(b != 0));
             }
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantSByte) {
             byte[] array = ((VariantSByte) variant).getValue();
-            if (array.length == 1) {
-                value = new PlcSINT(array[0]);
-            } else {
-                List<PlcValue> values = new ArrayList<>(array.length);
-                for (byte b : array) {
-                    values.add(new PlcSINT(b));
-                }
-                value = new PlcList(values);
+            List<PlcValue> values = new ArrayList<>(array.length);
+            for (byte b : array) {
+                values.add(new PlcSINT(b));
             }
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantByte) {
             List<Short> array = ((VariantByte) variant).getValue();
-            if (array.size() == 1) {
-                value = new PlcUSINT(array.getFirst());
-            } else {
-                List<PlcValue> values = new ArrayList<>(array.size());
-                for (Short s : array) {
-                    values.add(new PlcUSINT(s));
-                }
-                value = new PlcList(values);
+            List<PlcValue> values = new ArrayList<>(array.size());
+            for (Short s : array) {
+                values.add(new PlcUSINT(s));
             }
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantInt16) {
             List<Short> array = ((VariantInt16) variant).getValue();
-            if (array.size() == 1) {
-                value = new PlcINT(array.getFirst());
-            } else {
-                List<PlcValue> values = new ArrayList<>(array.size());
-                for (Short s : array) {
-                    values.add(new PlcINT(s));
-                }
-                value = new PlcList(values);
+            List<PlcValue> values = new ArrayList<>(array.size());
+            for (Short s : array) {
+                values.add(new PlcINT(s));
             }
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantUInt16) {
             List<Integer> array = ((VariantUInt16) variant).getValue();
-            if (array.size() == 1) {
-                value = new PlcUINT(array.getFirst());
-            } else {
-                List<PlcValue> values = new ArrayList<>(array.size());
-                for (Integer i : array) {
-                    values.add(new PlcUINT(i));
-                }
-                value = new PlcList(values);
+            List<PlcValue> values = new ArrayList<>(array.size());
+            for (Integer i : array) {
+                values.add(new PlcUINT(i));
             }
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantInt32) {
             List<Integer> array = ((VariantInt32) variant).getValue();
-            if (array.size() == 1) {
-                value = new PlcDINT(array.getFirst());
-            } else {
-                List<PlcValue> values = new ArrayList<>(array.size());
-                for (Integer i : array) {
-                    values.add(new PlcDINT(i));
-                }
-                value = new PlcList(values);
+            List<PlcValue> values = new ArrayList<>(array.size());
+            for (Integer i : array) {
+                values.add(new PlcDINT(i));
             }
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantUInt32) {
             List<Long> array = ((VariantUInt32) variant).getValue();
-            if (array.size() == 1) {
-                value = new PlcUDINT(array.getFirst());
-            } else {
-                List<PlcValue> values = new ArrayList<>(array.size());
-                for (Long l : array) {
-                    values.add(new PlcUDINT(l));
-                }
-                value = new PlcList(values);
+            List<PlcValue> values = new ArrayList<>(array.size());
+            for (Long l : array) {
+                values.add(new PlcUDINT(l));
             }
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantInt64) {
             List<Long> array = ((VariantInt64) variant).getValue();
-            if (array.size() == 1) {
-                value = new PlcLINT(array.getFirst());
-            } else {
-                List<PlcValue> values = new ArrayList<>(array.size());
-                for (Long l : array) {
-                    values.add(new PlcLINT(l));
-                }
-                value = new PlcList(values);
+            List<PlcValue> values = new ArrayList<>(array.size());
+            for (Long l : array) {
+                values.add(new PlcLINT(l));
             }
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantUInt64) {
             List<BigInteger> array = ((VariantUInt64) variant).getValue();
-            if (array.size() == 1) {
-                value = new PlcULINT(array.getFirst());
-            } else {
-                List<PlcValue> values = new ArrayList<>(array.size());
-                for (BigInteger bi : array) {
-                    values.add(new PlcULINT(bi));
-                }
-                value = new PlcList(values);
+            List<PlcValue> values = new ArrayList<>(array.size());
+            for (BigInteger bi : array) {
+                values.add(new PlcULINT(bi));
             }
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantFloat) {
             List<Float> array = ((VariantFloat) variant).getValue();
-            if (array.size() == 1) {
-                value = new PlcREAL(array.getFirst());
-            } else {
-                List<PlcValue> values = new ArrayList<>(array.size());
-                for (Float f : array) {
-                    values.add(new PlcREAL(f));
-                }
-                value = new PlcList(values);
+            List<PlcValue> values = new ArrayList<>(array.size());
+            for (Float f : array) {
+                values.add(new PlcREAL(f));
             }
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantDouble) {
             List<Double> array = ((VariantDouble) variant).getValue();
-            if (array.size() == 1) {
-                value = new PlcLREAL(array.getFirst());
-            } else {
-                List<PlcValue> values = new ArrayList<>(array.size());
-                for (Double d : array) {
-                    values.add(new PlcLREAL(d));
-                }
-                value = new PlcList(values);
+            List<PlcValue> values = new ArrayList<>(array.size());
+            for (Double d : array) {
+                values.add(new PlcLREAL(d));
             }
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantString) {
             List<PascalString> stringArray = ((VariantString) 
variant).getValue();
-            if (stringArray.size() == 1) {
-                value = new PlcSTRING(stringArray.getFirst().getStringValue());
-            } else {
-                List<PlcValue> values = new ArrayList<>(stringArray.size());
-                for (PascalString ps : stringArray) {
-                    values.add(new PlcSTRING(ps.getStringValue()));
-                }
-                value = new PlcList(values);
+            List<PlcValue> values = new ArrayList<>(stringArray.size());
+            for (PascalString ps : stringArray) {
+                values.add(new PlcSTRING(ps.getStringValue()));
             }
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantDateTime) {
             List<Long> array = ((VariantDateTime) variant).getValue();
-            if (array.size() == 1) {
-                value = 
LegacyPlcValueHandler.of(LocalDateTime.ofInstant(Instant.ofEpochMilli(getDateTime(array.getFirst())),
 ZoneOffset.UTC));
-            } else {
-                List<PlcValue> values = new ArrayList<>(array.size());
-                for (Long l : array) {
-                    
values.add(LegacyPlcValueHandler.of(LocalDateTime.ofInstant(Instant.ofEpochMilli(getDateTime(l)),
 ZoneOffset.UTC)));
-                }
-                value = new PlcList(values);
+            List<PlcValue> values = new ArrayList<>(array.size());
+            for (Long l : array) {
+                
values.add(LegacyPlcValueHandler.of(LocalDateTime.ofInstant(Instant.ofEpochMilli(getDateTime(l)),
 ZoneOffset.UTC)));
             }
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantGuid) {
             List<GuidValue> array = ((VariantGuid) variant).getValue();
-            int length = array.size();
-            String[] tmpValue = new String[length];
-            for (int i = 0; i < length; i++) {
-                //These two data section aren't little endian like the rest.
-                byte[] data4Bytes = array.get(i).getData4();
+            List<PlcValue> values = new ArrayList<>(array.size());
+            for (GuidValue guidValue : array) {
+                //These two data sections aren't little endian like the rest.
+                byte[] data4Bytes = guidValue.getData4();
                 int data4 = 0;
                 for (byte data4Byte : data4Bytes) {
                     data4 = (data4 << 8) + (data4Byte & 0xff);
                 }
-                byte[] data5Bytes = array.get(i).getData5();
+                byte[] data5Bytes = guidValue.getData5();
                 long data5 = 0;
                 for (byte data5Byte : data5Bytes) {
                     data5 = (data5 << 8) + (data5Byte & 0xff);
                 }
-                tmpValue[i] = Long.toHexString(array.get(i).getData1()) + "-" 
+ Integer.toHexString(array.get(i).getData2()) + "-" + 
Integer.toHexString(array.get(i).getData3()) + "-" + Integer.toHexString(data4) 
+ "-" + Long.toHexString(data5);
+                values.add(new 
PlcSTRING(Long.toHexString(guidValue.getData1()) + "-" + 
Integer.toHexString(guidValue.getData2()) + "-" + 
Integer.toHexString(guidValue.getData3()) + "-" + Integer.toHexString(data4) + 
"-" + Long.toHexString(data5)));
             }
-            value = LegacyPlcValueHandler.of(tmpValue);
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantXmlElement) {
-            int length = ((VariantXmlElement) variant).getValue().size();
             List<PascalString> strings = ((VariantXmlElement) 
variant).getValue();
-            String[] tmpValue = new String[length];
-            for (int i = 0; i < length; i++) {
-                tmpValue[i] = strings.get(i).getStringValue();
+            List<PlcValue> values = new ArrayList<>(strings.size());
+            for (PascalString ps : strings) {
+                values.add(new PlcSTRING(ps.getStringValue()));
             }
-            value = LegacyPlcValueHandler.of(tmpValue);
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantLocalizedText) {
-            int length = ((VariantLocalizedText) variant).getValue().size();
             List<LocalizedText> strings = ((VariantLocalizedText) 
variant).getValue();
-            String[] tmpValue = new String[length];
-            for (int i = 0; i < length; i++) {
-                tmpValue[i] = "";
-                tmpValue[i] += strings.get(i).getLocaleSpecified() ? 
strings.get(i).getLocale().getStringValue() + "|" : "";
-                tmpValue[i] += strings.get(i).getTextSpecified() ? 
strings.get(i).getText().getStringValue() : "";
+            List<PlcValue> values = new ArrayList<>(strings.size());
+            for (LocalizedText lt : strings) {
+                String s = "";
+                s += lt.getLocaleSpecified() ? lt.getLocale().getStringValue() 
+ "|" : "";
+                s += lt.getTextSpecified() ? lt.getText().getStringValue() : 
"";
+                values.add(new PlcSTRING(s));
             }
-            value = LegacyPlcValueHandler.of(tmpValue);
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantQualifiedName) {
-            int length = ((VariantQualifiedName) variant).getValue().size();
             List<QualifiedName> strings = ((VariantQualifiedName) 
variant).getValue();
-            String[] tmpValue = new String[length];
-            for (int i = 0; i < length; i++) {
-                tmpValue[i] = "ns=" + strings.get(i).getNamespaceIndex() + 
";s=" + strings.get(i).getName().getStringValue();
+            List<PlcValue> values = new ArrayList<>(strings.size());
+            for (QualifiedName qn : strings) {
+                values.add(new PlcSTRING("ns=" + qn.getNamespaceIndex() + 
";s=" + qn.getName().getStringValue()));
             }
-            value = LegacyPlcValueHandler.of(tmpValue);
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantExtensionObject) {
-            int length = ((VariantExtensionObject) variant).getValue().size();
-            List<ExtensionObject> strings = ((VariantExtensionObject) 
variant).getValue();
-            String[] tmpValue = new String[length];
-            for (int i = 0; i < length; i++) {
-                tmpValue[i] = strings.get(i).toString();
+            List<ExtensionObject> objects = ((VariantExtensionObject) 
variant).getValue();
+            List<PlcValue> values = new ArrayList<>(objects.size());
+            for (ExtensionObject eo : objects) {
+                values.add(new PlcSTRING(eo.toString()));
             }
-            value = LegacyPlcValueHandler.of(tmpValue);
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantNodeId) {
-            int length = ((VariantNodeId) variant).getValue().size();
-            List<NodeId> strings = ((VariantNodeId) variant).getValue();
-            String[] tmpValue = new String[length];
-            for (int i = 0; i < length; i++) {
-                tmpValue[i] = strings.get(i).toString();
+            List<NodeId> nodeIds = ((VariantNodeId) variant).getValue();
+            List<PlcValue> values = new ArrayList<>(nodeIds.size());
+            for (NodeId nid : nodeIds) {
+                values.add(new PlcSTRING(nid.toString()));
             }
-            value = LegacyPlcValueHandler.of(tmpValue);
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantStatusCode) {
-            int length = ((VariantStatusCode) variant).getValue().size();
-            List<StatusCode> strings = ((VariantStatusCode) 
variant).getValue();
-            String[] tmpValue = new String[length];
-            for (int i = 0; i < length; i++) {
-                tmpValue[i] = strings.get(i).toString();
+            List<StatusCode> statusCodes = ((VariantStatusCode) 
variant).getValue();
+            List<PlcValue> values = new ArrayList<>(statusCodes.size());
+            for (StatusCode sc : statusCodes) {
+                values.add(new PlcSTRING(sc.toString()));
             }
-            value = LegacyPlcValueHandler.of(tmpValue);
+            value = structurePlcValues(values, variant);
         } else if (variant instanceof VariantByteString) {
-            PlcList plcList = new PlcList();
             List<ByteStringArray> array = ((VariantByteString) 
variant).getValue();
+            List<PlcValue> values = new ArrayList<>(array.size());
             for (ByteStringArray byteStringArray : array) {
-                int length = byteStringArray.getValue().size();
-                Short[] tmpValue = new Short[length];
-                for (int i = 0; i < length; i++) {
-                    tmpValue[i] = byteStringArray.getValue().get(i);
-                }
-                plcList.add(LegacyPlcValueHandler.of(tmpValue));
+                Short[] tmpValue = byteStringArray.getValue().toArray(new 
Short[0]);
+                values.add(LegacyPlcValueHandler.of(tmpValue));
             }
-            value = plcList;
+            value = structurePlcValues(values, variant);
         }
         return value;
     }
 
+    /**
+     * Structures a flat list of PlcValues according to the variant's 
dimensionality:
+     * - Single value: returns the scalar PlcValue directly
+     * - 1D array (no array dimensions specified): returns a flat PlcList
+     * - Multi-dimensional array: returns nested PlcLists matching the 
declared dimensions
+     */
+    private static PlcValue structurePlcValues(List<PlcValue> values, Variant 
variant) {
+        if (values.size() == 1) {
+            return values.getFirst();
+        }
+        List<Integer> dimensions = variant.getArrayDimensions();
+        if (dimensions == null || dimensions.isEmpty()) {
+            return new PlcList(values);
+        }
+        return buildMultiDimensionalList(values, dimensions);
+    }
+
+    /**
+     * Recursively partitions a flat list of PlcValues into nested PlcLists
+     * according to the given dimensions.
+     * E.g., 6 values with dimensions [3, 2] produces a PlcList of 3 PlcLists 
of 2 values each.
+     */
+    private static PlcValue buildMultiDimensionalList(List<PlcValue> 
flatValues, List<Integer> dimensions) {
+        if (dimensions.size() <= 1) {
+            return new PlcList(flatValues);
+        }
+        int currentDim = dimensions.getFirst();
+        List<Integer> remainingDims = dimensions.subList(1, dimensions.size());
+        int chunkSize = flatValues.size() / currentDim;
+        List<PlcValue> result = new ArrayList<>(currentDim);
+        for (int i = 0; i < currentDim; i++) {
+            result.add(buildMultiDimensionalList(flatValues.subList(i * 
chunkSize, (i + 1) * chunkSize), remainingDims));
+        }
+        return new PlcList(result);
+    }
+
     private static PlcResponseCode mapOpcStatusCode(long opcStatusCode, 
PlcResponseCode fallback) {
         if (!OpcuaStatusCode.isDefined(opcStatusCode)) {
             return PlcResponseCode.INTERNAL_ERROR;
diff --git 
a/plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/ManualS71500NewFWDriverTest.java
 
b/plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/ManualS71500NewFWDriverTest.java
index 768a3e255f..d49a884ecd 100644
--- 
a/plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/ManualS71500NewFWDriverTest.java
+++ 
b/plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/ManualS71500NewFWDriverTest.java
@@ -37,68 +37,68 @@ public class ManualS71500NewFWDriverTest extends ManualTest 
{
     public static void main(String[] args) throws Exception {
         boolean testArrays = true;
         ManualS71500NewFWDriverTest test = new 
ManualS71500NewFWDriverTest("opcua://192.168.23.28:4840");
-//        test.addTestCase(/*"g_b1",*/            "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_b1\"",          new PlcBOOL(true));
-//        test.addTestCase(/*"g_b8",*/            "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_b8\"",                 new PlcBYTE(0xAB));
-//        test.addTestCase(/*"g_s8",*/            "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_s8\"",                 new PlcSINT(-12));
-//        test.addTestCase(/*"g_u8",*/            "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_u8\"",                 new PlcUSINT(250));
-//        test.addTestCase(/*"g_b16",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_b16\"",            new PlcWORD(0xBEEF));
-//        test.addTestCase(/*"g_s16",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_s16\"",         new PlcINT(-1234));
-//        test.addTestCase(/*"g_u16",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_u16\"",         new PlcUINT(54321));
-//        test.addTestCase(/*"g_b32",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_b32\"",         new PlcDWORD(0xDEADBEEFL));
-//        test.addTestCase(/*"g_s32",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_s32\"",         new PlcDINT(-12345678));
-//        test.addTestCase(/*"g_u32",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_u32\"",         new PlcUDINT(305419896));
-//        test.addTestCase(/*"g_b64",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_b64\"",         new PlcLWORD(0x0123_4567_89AB_CDEFL));
-//        test.addTestCase(/*"g_s64",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_s64\"",         new PlcLINT(-9223372036854770000L));
-//        test.addTestCase(/*"g_u64",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_u64\"",         new PlcULINT(new 
BigDecimal("18446744073709551000")));
-//        test.addTestCase(/*"g_r32",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_r32\"",         new PlcREAL(3.14159));
-//        test.addTestCase(/*"g_r64",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_r64\"",         new PlcLREAL(2.71828182845905));
+        test.addTestCase(/*"g_b1",*/            "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_b1\"",          new PlcBOOL(true));
+        test.addTestCase(/*"g_b8",*/            "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_b8\"",           new PlcBYTE(0xAB));
+        test.addTestCase(/*"g_s8",*/            "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_s8\"",           new PlcSINT(-12));
+        test.addTestCase(/*"g_u8",*/            "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_u8\"",           new PlcUSINT(250));
+        test.addTestCase(/*"g_b16",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_b16\"",      new PlcWORD(0xBEEF));
+        test.addTestCase(/*"g_s16",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_s16\"",         new PlcINT(-1234));
+        test.addTestCase(/*"g_u16",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_u16\"",         new PlcUINT(54321));
+        test.addTestCase(/*"g_b32",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_b32\"",         new PlcDWORD(0xDEADBEEFL));
+        test.addTestCase(/*"g_s32",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_s32\"",         new PlcDINT(-12345678));
+        test.addTestCase(/*"g_u32",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_u32\"",         new PlcUDINT(305419896));
+        test.addTestCase(/*"g_b64",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_b64\"",         new PlcLWORD(0x0123_4567_89AB_CDEFL));
+        test.addTestCase(/*"g_s64",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_s64\"",         new PlcLINT(-9223372036854770000L));
+        test.addTestCase(/*"g_u64",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_u64\"",         new PlcULINT(new 
BigDecimal("18446744073709551000")));
+        test.addTestCase(/*"g_r32",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_r32\"",         new PlcREAL(3.14159));
+        test.addTestCase(/*"g_r64",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_r64\"",         new PlcLREAL(2.71828182845905));
 //        test.addTestCase(/*"g_tim",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_tim\"",         new PlcTIME(2500)); // TODO: Is returned as Int32
 //        test.addTestCase(/*"g_dat",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_dat\"",         new PlcDATE(LocalDate.of(2025, 11, 12))); // TODO: 
Is returned as UInt16
 //        test.addTestCase(/*"g_timoday",*/       "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_timoday\"",    new PlcTIME_OF_DAY(LocalTime.of(14, 33, 21, 
250000000))); // TODO: Is returned as UInt32
 //        test.addTestCase(/*"g_dattim",*/        "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_dattim\"",      new PlcDATE_AND_LTIME(LocalDateTime.of(2025, 11, 12, 
14, 33, 21, 500_000_000))); // TODO: Getting a class cast error, because 
OpcuaMessageResponse cannot be cast to OpcuaAPU
-//        test.addTestCase(/*"g_str",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_str\"",         new PlcSTRING("Hello PLC4X"));
-//        test.addTestCase(/*"g_wstr",*/          "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_wstr\"",        new PlcWSTRING("Grüße von PLC4X"));
+        test.addTestCase(/*"g_str",*/           "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_str\"",         new PlcSTRING("Hello PLC4X"));
+        test.addTestCase(/*"g_wstr",*/          "ns=3;s=\"OPC_UA_DB\".\"OPC 
Data\".\"g_wstr\"",        new PlcWSTRING("Grüße von PLC4X"));
         if(testArrays) {
-//            test.addTestCase(/*"g_arrBool",*/       
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrBool\"", new PlcList(List.of(
-//                new PlcBOOL(true), new PlcBOOL(false), new PlcBOOL(true), 
new PlcBOOL(true),
-//                new PlcBOOL(false), new PlcBOOL(false), new PlcBOOL(true), 
new PlcBOOL(false))
-//            ));
-//            test.addTestCase(/*"g_arrByte",*/       
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrByte\"", new PlcList(List.of(
-//                new PlcBYTE(0xDE), new PlcBYTE(0xAD), new PlcBYTE(0xBE), new 
PlcBYTE(0xEF),
-//                new PlcBYTE(0x12), new PlcBYTE(0x34), new PlcBYTE(0x56), new 
PlcBYTE(0x78))
-//            ));
-//            test.addTestCase(/*"g_arrInt",*/        
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrInt\"", new PlcList(List.of(
-//                new PlcINT(-3), new PlcINT(-1), new PlcINT(0), new 
PlcINT(1), new PlcINT(3))
-//            ));
-//            test.addTestCase(/*"g_arrUInt",*/       
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrUInt\"", new PlcList(List.of(
-//                new PlcUINT(1), new PlcUINT(10), new PlcUINT(100), new 
PlcUINT(1000), new PlcUINT(10000))
-//            ));
-//            test.addTestCase(/*"g_arrDInt",*/       
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrDInt\"", new PlcList(List.of(
-//                new PlcDINT(-1000), new PlcDINT(0), new PlcDINT(1000), new 
PlcDINT(2000000))
-//            ));
-//            test.addTestCase(/*"g_arrUDInt",*/       
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrUDInt\"", new PlcList(List.of(
-//                new PlcUDINT(0), new PlcUDINT(1), new PlcUDINT(0xFFFF), new 
PlcUDINT(0x12345678))
-//            ));
-//            test.addTestCase(/*"g_arrLReal",*/      
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrLReal\"", new PlcList(List.of(
-//                new PlcLREAL(1.5), new PlcLREAL(-2.0), new PlcLREAL(0.125))
-//            ));
+            test.addTestCase(/*"g_arrBool",*/       
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrBool\"", new PlcList(List.of(
+                new PlcBOOL(true), new PlcBOOL(false), new PlcBOOL(true), new 
PlcBOOL(true),
+                new PlcBOOL(false), new PlcBOOL(false), new PlcBOOL(true), new 
PlcBOOL(false))
+            ));
+            test.addTestCase(/*"g_arrByte",*/       
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrByte\"", new PlcList(List.of(
+                new PlcBYTE(0xDE), new PlcBYTE(0xAD), new PlcBYTE(0xBE), new 
PlcBYTE(0xEF),
+                new PlcBYTE(0x12), new PlcBYTE(0x34), new PlcBYTE(0x56), new 
PlcBYTE(0x78))
+            ));
+            test.addTestCase(/*"g_arrInt",*/        
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrInt\"", new PlcList(List.of(
+                new PlcINT(-3), new PlcINT(-1), new PlcINT(0), new PlcINT(1), 
new PlcINT(3))
+            ));
+            test.addTestCase(/*"g_arrUInt",*/       
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrUInt\"", new PlcList(List.of(
+                new PlcUINT(1), new PlcUINT(10), new PlcUINT(100), new 
PlcUINT(1000), new PlcUINT(10000))
+            ));
+            test.addTestCase(/*"g_arrDInt",*/       
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrDInt\"", new PlcList(List.of(
+                new PlcDINT(-1000), new PlcDINT(0), new PlcDINT(1000), new 
PlcDINT(2000000))
+            ));
+            test.addTestCase(/*"g_arrUDInt",*/       
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrUDInt\"", new PlcList(List.of(
+                new PlcUDINT(0), new PlcUDINT(1), new PlcUDINT(0xFFFF), new 
PlcUDINT(0x12345678))
+            ));
+            test.addTestCase(/*"g_arrLReal",*/      
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrLReal\"", new PlcList(List.of(
+                new PlcLREAL(1.5), new PlcLREAL(-2.0), new PlcLREAL(0.125))
+            ));
 //            test.addTestCase(/*"g_arrTime",*/       
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrTime\"", new PlcList(List.of(
 //                new PlcTIME(Duration.ofMillis(10)), new 
PlcTIME(Duration.ofSeconds(1)), new PlcTIME(Duration.ofSeconds(10)))
 //            ));
-//            test.addTestCase(/*"g_arrString",*/     
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrString\"", new PlcList(List.of(
-//                new PlcSTRING("alpha"), new PlcSTRING("beta"), new 
PlcSTRING("gamma"))
-//            ));
-//            test.addTestCase(/*"g_arrWString",*/     
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrWString\"", new PlcList(List.of(
-//                new PlcWSTRING("Äpfel"), new PlcWSTRING("Öl"))
-//            ));
-//            test.addTestCase(/*"g_matI16_2x3",*/    
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_matI16_2x3\"", new PlcList(List.of( // 
TODO: Getting a class cast error, because OpcuaMessageResponse cannot be cast 
to OpcuaAPU
-//                new PlcList(List.of(
-//                    new PlcINT(10), new PlcINT(11), new PlcINT(12)
-//                )),
-//                new PlcList(List.of(
-//                    new PlcINT(-10), new PlcINT(-11), new PlcINT(-12)
-//                )))
-//            ));
+            test.addTestCase(/*"g_arrString",*/     
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrString\"", new PlcList(List.of(
+                new PlcSTRING("alpha"), new PlcSTRING("beta"), new 
PlcSTRING("gamma"))
+            ));
+            test.addTestCase(/*"g_arrWString",*/     
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_arrWString\"", new PlcList(List.of(
+                new PlcWSTRING("Äpfel"), new PlcWSTRING("Öl"))
+            ));
+            test.addTestCase(/*"g_matI16_2x3",*/    
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_matI16_2x3\"", new PlcList(List.of( // 
TODO: Getting a class cast error, because OpcuaMessageResponse cannot be cast 
to OpcuaAPU
+                new PlcList(List.of(
+                    new PlcINT(10), new PlcINT(11), new PlcINT(12)
+                )),
+                new PlcList(List.of(
+                    new PlcINT(-10), new PlcINT(-11), new PlcINT(-12)
+                )))
+            ));
             test.addTestCase(/*"g_matR32_3x2",*/    
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_matR32_3x2\"", new PlcList(List.of(
                 new PlcList(List.of(
                     new PlcREAL(1.0), new PlcREAL(1.5)
@@ -110,24 +110,24 @@ public class ManualS71500NewFWDriverTest extends 
ManualTest {
                     new PlcREAL(3.0), new PlcREAL(3.5)
                 )))
             ));
-//            test.addTestCase(/*"g_cubeU16_2x2x2",*/ 
"%DB42:466.0:INT[1;1..2][1;1..2][1;1..2]", new PlcList(List.of(
-//                new PlcList(List.of(
-//                    new PlcList(List.of(
-//                        new PlcINT(1), new PlcINT(2)
-//                    )),
-//                    new PlcList(List.of(
-//                        new PlcINT(3), new PlcINT(4)
-//                    ))
-//                )),
-//                new PlcList(List.of(
-//                    new PlcList(List.of(
-//                        new PlcINT(5), new PlcINT(6)
-//                    )),
-//                    new PlcList(List.of(
-//                        new PlcINT(7), new PlcINT(8)
-//                    ))
-//                )))
-//            ));
+            test.addTestCase(/*"g_cubeU16_2x2x2",*/ 
"ns=3;s=\"OPC_UA_DB\".\"OPC Data\".\"g_cubeU16_2x2x2\"", new PlcList(List.of(
+                new PlcList(List.of(
+                    new PlcList(List.of(
+                        new PlcUINT(1), new PlcUINT(2)
+                    )),
+                    new PlcList(List.of(
+                        new PlcUINT(3), new PlcUINT(4)
+                    ))
+                )),
+                new PlcList(List.of(
+                    new PlcList(List.of(
+                        new PlcUINT(5), new PlcUINT(6)
+                    )),
+                    new PlcList(List.of(
+                        new PlcUINT(7), new PlcUINT(8)
+                    ))
+                )))
+            ));
         }
 
         long start = System.currentTimeMillis();

Reply via email to