This is an automated email from the ASF dual-hosted git repository. cdutz pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/develop by this push: new 69376b3 changed delimiter of opc ua from : to ; (#258) 69376b3 is described below commit 69376b3601dfc11d194b4acb6bf2ca4c18f4bdc6 Author: Matthias Milan Strljic <nal...@users.noreply.github.com> AuthorDate: Thu Sep 2 15:22:41 2021 +0200 changed delimiter of opc ua from : to ; (#258) Co-authored-by: cdutz <christofer.d...@c-ware.de> --- .../apache/plc4x/java/opcua/field/OpcuaField.java | 2 +- .../apache/plc4x/java/opcua/OpcuaPlcDriverTest.java | 20 ++++++++++---------- .../plc4x/java/opcua/protocol/OpcuaFieldTest.java | 18 ++++++++++-------- .../plc4x/java/opcuaserver/OpcuaPlcDriverTest.java | 14 +++++++------- src/site/asciidoc/users/protocols/opc-ua.adoc | 8 ++++---- 5 files changed, 32 insertions(+), 30 deletions(-) diff --git a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/field/OpcuaField.java b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/field/OpcuaField.java index 2ac4177..8dd6df9 100644 --- a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/field/OpcuaField.java +++ b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/field/OpcuaField.java @@ -37,7 +37,7 @@ import java.util.regex.Pattern; */ public class OpcuaField implements PlcSubscriptionField { - public static final Pattern ADDRESS_PATTERN = Pattern.compile("^ns=(?<namespace>\\d+);(?<identifierType>[isgb])=((?<identifier>[^:]+))?(:(?<datatype>[a-zA-Z_]+))?"); + public static final Pattern ADDRESS_PATTERN = Pattern.compile("^ns=(?<namespace>\\d+);(?<identifierType>[isgb])=((?<identifier>[^;]+))?(;(?<datatype>[a-zA-Z_]+))?"); private final OpcuaIdentifierType identifierType; 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 fa240f5..e5c3bbe 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 @@ -255,23 +255,23 @@ public class OpcuaPlcDriverTest { PlcWriteRequest.Builder builder = opcuaConnection.writeRequestBuilder(); builder.addItem("Bool", BOOL_IDENTIFIER_READ_WRITE, true); - builder.addItem("Byte", BYTE_IDENTIFIER_READ_WRITE + ":BYTE", (short) 3); + builder.addItem("Byte", BYTE_IDENTIFIER_READ_WRITE + ";BYTE", (short) 3); 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 + "", (short) 1); 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 + ":SINT", -127); + builder.addItem("SByte", SBYTE_IDENTIFIER_READ_WRITE + ";SINT", -127); builder.addItem("String", STRING_IDENTIFIER_READ_WRITE, "Helllo Toddy!"); - builder.addItem("UInt16", UINT16_IDENTIFIER_READ_WRITE + ":UINT", 65535); - builder.addItem("UInt32", UINT32_IDENTIFIER_READ_WRITE + ":UDINT", 101010101L); - builder.addItem("UInt64", UINT64_IDENTIFIER_READ_WRITE + ":ULINT", new BigInteger("1337")); - builder.addItem("UInteger", UINTEGER_IDENTIFIER_READ_WRITE + ":UDINT", 102020202L); + builder.addItem("UInt16", UINT16_IDENTIFIER_READ_WRITE + ";UINT", 65535); + builder.addItem("UInt32", UINT32_IDENTIFIER_READ_WRITE + ";UDINT", 101010101L); + builder.addItem("UInt64", UINT64_IDENTIFIER_READ_WRITE + ";ULINT", new BigInteger("1337")); + builder.addItem("UInteger", UINTEGER_IDENTIFIER_READ_WRITE + ";UDINT", 102020202L); builder.addItem("BooleanArray", BOOL_ARRAY_IDENTIFIER, new Boolean[] {true, true, true, true, true}); - builder.addItem("ByteArray", BYTE_ARRAY_IDENTIFIER + ":BYTE", new Short[] {1, 100, 100, 255, 123}); + builder.addItem("ByteArray", BYTE_ARRAY_IDENTIFIER + ";BYTE", new Short[] {1, 100, 100, 255, 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}); @@ -280,9 +280,9 @@ public class OpcuaPlcDriverTest { 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("UInt16Array", UINT16_ARRAY_IDENTIFIER + ":UINT", new Short[] {1,2,3,4,5}); - builder.addItem("UInt32Array", UINT32_ARRAY_IDENTIFIER + ":UDINT", new Integer[] {1,2,3,4,5}); - builder.addItem("UInt64Array", UINT64_ARRAY_IDENTIFIER + ":ULINT", new Long[] {1L,2L,3L,4L,5L}); + builder.addItem("UInt16Array", UINT16_ARRAY_IDENTIFIER + ";UINT", new Short[] {1,2,3,4,5}); + builder.addItem("UInt32Array", UINT32_ARRAY_IDENTIFIER + ";UDINT", new Integer[] {1,2,3,4,5}); + builder.addItem("UInt64Array", UINT64_ARRAY_IDENTIFIER + ";ULINT", new Long[] {1L,2L,3L,4L,5L}); builder.addItem("DoesNotExists", DOES_NOT_EXIST_IDENTIFIER_READ_WRITE, "11"); diff --git a/plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/protocol/OpcuaFieldTest.java b/plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/protocol/OpcuaFieldTest.java index 5fd927a..9fe3e22 100644 --- a/plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/protocol/OpcuaFieldTest.java +++ b/plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/protocol/OpcuaFieldTest.java @@ -46,9 +46,11 @@ public class OpcuaFieldTest { assertMatching(ADDRESS_PATTERN, "ns=2;i=10846"); //string based address values assertMatching(ADDRESS_PATTERN, "ns=2;s=test.variable.name.inspect"); + assertMatching(ADDRESS_PATTERN, "ns=2;s=::AsGlobalPV:ProductionOrder"); + assertMatching(ADDRESS_PATTERN, "ns=2;s=::AsGlobalPV:ProductionOrder;BOOL"); assertMatching(ADDRESS_PATTERN, "ns=2;s=key param with some spaces"); assertMatching(ADDRESS_PATTERN, "ns=2;s=\"aweired\".\"siemens\".\"param\".\"submodule\".\"param"); - assertMatching(ADDRESS_PATTERN, "ns=2;s=Weee314Waannaaa\\somenice=ext=a234a*#+1455!§$%&/()tttraaaaSymbols-.,,"); + assertMatching(ADDRESS_PATTERN, "ns=2;s=Weee314Waannaaa\\somenice=ext=a234a*#+1455!§$%&/()tttraaaaSymbols-:.,,"); // GUID address tests assertMatching(ADDRESS_PATTERN, "ns=2;g=09087e75-8e5e-499b-954f-f2a8624db28a"); // binary encoded addresses @@ -60,17 +62,17 @@ public class OpcuaFieldTest { public void testOpcuaAddressDataTypePattern() { //standard integer based param - assertMatching(ADDRESS_PATTERN, "ns=2;i=10846:BOOL"); + assertMatching(ADDRESS_PATTERN, "ns=2;i=10846;BOOL"); //string based address values - assertMatching(ADDRESS_PATTERN, "ns=2;s=test.variable.name.inspect:DINT"); - assertMatching(ADDRESS_PATTERN, "ns=2;s=key param with some spaces:ULINT"); - assertMatching(ADDRESS_PATTERN, "ns=2;s=\"aweired\".\"siemens\".\"param\".\"submodule\".\"param:LREAL"); + assertMatching(ADDRESS_PATTERN, "ns=2;s=test.variable.name.inspect;DINT"); + assertMatching(ADDRESS_PATTERN, "ns=2;s=key param with some spaces;ULINT"); + assertMatching(ADDRESS_PATTERN, "ns=2;s=\"aweired\".\"siemens\".\"param\".\"submodule\".\"param;LREAL"); //REGEX Valid, additional checks need to be done later - assertMatching(ADDRESS_PATTERN, "ns=2;s=Weee314Waannaaa\\somenice=ext=a234a*#+1455!§$%&/()tttraaaaSymbols-.,,:JIBBERISH"); + assertMatching(ADDRESS_PATTERN, "ns=2;s=Weee314Waannaaa\\somenice=ext=a234a*#+1455!§$%&/()tttraaaaSymbols-.,,;JIBBERISH"); // GUID address tests - assertNoMatching(ADDRESS_PATTERN, "ns=2;g=09087e75-8e5e-499b-954f-f2a8624db28a:*&#%^*$(*)"); + assertNoMatching(ADDRESS_PATTERN, "ns=2;g=09087e75-8e5e-499b-954f-f2a8624db28a;*&#%^*$(*)"); // binary encoded addresses - assertNoMatching(ADDRESS_PATTERN, "ns=2;b=asvae:wavarahreb=="); + assertNoMatching(ADDRESS_PATTERN, "ns=2;b=asvae;wavarahreb=="); } } diff --git a/plc4j/integrations/opcua-server/src/test/java/org/apache/plc4x/java/opcuaserver/OpcuaPlcDriverTest.java b/plc4j/integrations/opcua-server/src/test/java/org/apache/plc4x/java/opcuaserver/OpcuaPlcDriverTest.java index 91465d9..d5015db 100644 --- a/plc4j/integrations/opcua-server/src/test/java/org/apache/plc4x/java/opcuaserver/OpcuaPlcDriverTest.java +++ b/plc4j/integrations/opcua-server/src/test/java/org/apache/plc4x/java/opcuaserver/OpcuaPlcDriverTest.java @@ -203,19 +203,19 @@ public class OpcuaPlcDriverTest { PlcWriteRequest.Builder builder = opcuaConnection.writeRequestBuilder(); builder.addItem("Bool", BOOL_IDENTIFIER_READ_WRITE, true); - builder.addItem("Byte", BYTE_IDENTIFIER_READ_WRITE + ":BYTE", 255); + builder.addItem("Byte", BYTE_IDENTIFIER_READ_WRITE + ";BYTE", 255); 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 + ":INT", 32000); + builder.addItem("Int16", INT16_IDENTIFIER_READ_WRITE + ";INT", 32000); 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 + ":USINT", 100); + builder.addItem("SByte", SBYTE_IDENTIFIER_READ_WRITE + ";USINT", 100); builder.addItem("String", STRING_IDENTIFIER_READ_WRITE, "Helllo Toddy!"); - builder.addItem("UInt16", UINT16_IDENTIFIER_READ_WRITE + ":UINT", 65535); - builder.addItem("UInt32", UINT32_IDENTIFIER_READ_WRITE + ":UDINT", 100); - builder.addItem("UInt64", UINT64_IDENTIFIER_READ_WRITE + ":ULINT", new BigInteger("1337")); - builder.addItem("UInteger", UINTEGER_IDENTIFIER_READ_WRITE + ":UDINT", 100); + builder.addItem("UInt16", UINT16_IDENTIFIER_READ_WRITE + ";UINT", 65535); + builder.addItem("UInt32", UINT32_IDENTIFIER_READ_WRITE + ";UDINT", 100); + builder.addItem("UInt64", UINT64_IDENTIFIER_READ_WRITE + ";ULINT", new BigInteger("1337")); + builder.addItem("UInteger", UINTEGER_IDENTIFIER_READ_WRITE + ";UDINT", 100); builder.addItem("DoesNotExists", DOES_NOT_EXIST_IDENTIFIER_READ_WRITE, "Sad Toddy"); diff --git a/src/site/asciidoc/users/protocols/opc-ua.adoc b/src/site/asciidoc/users/protocols/opc-ua.adoc index 01c66bf..a073dae 100644 --- a/src/site/asciidoc/users/protocols/opc-ua.adoc +++ b/src/site/asciidoc/users/protocols/opc-ua.adoc @@ -99,7 +99,7 @@ is selected based on the datatype of the returned value. For Unsigned data types ---- -ns={namespace-index};[s|i|g|b]={Identifier}:{Data Type} +ns={namespace-index};[s|i|g|b]={Identifier};{Data Type} ---- @@ -135,17 +135,17 @@ The following are examples of valid addresses String address: ---- ns=2;s=HelloWorld/ScalarTypes/Boolean -ns=2;s=HelloWorld/ScalarTypes/Boolean:BOOL +ns=2;s=HelloWorld/ScalarTypes/Boolean;BOOL ---- Numeric address ---- ns=1;i=1337 -ns=1;i=1337:DINT +ns=1;i=1337;DINT ---- GUID address: ---- ns=2;g=09087e75-8e5e-499b-954f-f2a8624db28a -ns=2;g=09087e75-8e5e-499b-954f-f2a8624db28a:REAL +ns=2;g=09087e75-8e5e-499b-954f-f2a8624db28a;REAL ---- Note the Identifiers `s`,`i`,`b` and `g` specify the format of the address not the data type of the returned value.