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();