From 71c5794c5e414a209224eca73fb00998a73a12b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Seidel?= Date: Thu, 1 Jun 2023 12:20:03 +0200 Subject: [PATCH 1/2] update sdk --- apax.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apax.yml b/apax.yml index 982295a..3158661 100644 --- a/apax.yml +++ b/apax.yml @@ -1,16 +1,16 @@ name: "apax-package-name-d7b4b031" -version: 1.0.0 +version: 3.0.0 type: lib targets: - "1500" # - axunit-llvm dependencies: - "@simatic-ax/json": 4.1.2 - "@simatic-ax/statemachine": 2.1.1 + "@simatic-ax/json": 4.1.3 + "@simatic-ax/statemachine": 2.1.2 devDependencies: - "@ax/sdk": 3.0.10 - "@ax/ax2tia": 4.2.10 - "@simatic-ax/snippetscollection": 0.0.15 + "@ax/sdk": 3.0.18 + "@ax/ax2tia": 4.5.4 + "@simatic-ax/snippetscollection": 0.1.3 variables: GLOBAL_LIBRARY_PATH: "apax-package-name-d7b4b031" LIBRARY_DOCUMENTS_FOLDER: "HandoverLibraryDocuments" From 14748dd8e90fb4628a5539d0d736f1d0d95d6204 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Seidel?= Date: Thu, 1 Jun 2023 12:20:18 +0200 Subject: [PATCH 2/2] add parser example --- src/JsonParser/JsonParser.st | 75 ++++++++++++++++++++++++++++++ test/JsonParser/TestJsonParster.st | 25 ++++++++++ 2 files changed, 100 insertions(+) create mode 100644 src/JsonParser/JsonParser.st create mode 100644 test/JsonParser/TestJsonParster.st diff --git a/src/JsonParser/JsonParser.st b/src/JsonParser/JsonParser.st new file mode 100644 index 0000000..1496281 --- /dev/null +++ b/src/JsonParser/JsonParser.st @@ -0,0 +1,75 @@ +USING Simatic.Ax.Json; +USING Simatic.Ax.Conversion; +USING AxUnit.Assert; + +NAMESPACE Simatic.Ax.Tiax + + /// {"DeviceName": "Device1", "Parameter": {"IP": "192.168.0.1", "Timeout": 300, "AutoConnect": true}} + FUNCTION_BLOCK JsonParser + VAR_INPUT + Execute : BOOL; + JsonAsString : STRING; // := '{"Name": "SIMATIC", "data": {"plc_type: 1518", "OPC_SERVER_ENABLED": 1}}'; + END_VAR + VAR_OUTPUT + Name : STRING; + Plc_type : INT; + Opc_server_enabled : BOOL; + END_VAR + VAR + _init : BOOL; + deserializer : Deserializer; + buffer : ARRAY[0..200] OF CHAR; + _executeOld : BOOL; + len : DINT; + keyArray: ARRAY [0..1] OF STRING; + value: STRING; + valueInt : INT; + keyFound: BOOL; + END_VAR + VAR_TEMP + + executeRis : BOOL; + END_VAR + + // Check the execute signal + executeRis := Execute AND NOT (_executeOld); + _executeOld := Execute; + + IF (executeRis) THEN + + // Convert String to "ArrayOfChar" + len:= Strings.ToArray.OfCharCount(str := JsonAsString, arr := buffer); + deserializer.buffer := REF(buffer); + + // Parse for String Name and expect value "SIMATIC" + keyFound := deserializer.TryParse( 'Name', value); + IF (keyFound) THEN + Name := value; + ELSE + Name := 'not found'; + END_IF; + + // Parse for nested key darta.plc_type and expect value 1518 + keyArray[0] := 'data'; + keyArray[1] := 'plc_type'; + keyFound := deserializer.TryParse(keyArray, valueInt); + IF (keyFound) THEN + Plc_type := valueInt; + ELSE + Plc_type := -1; + END_IF; + + // Parse for Integer plc_type and expect value 1518 + keyArray[0] := 'data'; + keyArray[1] := 'OPC_SERVER_ENABLED'; + keyFound := deserializer.TryParse(keyArray, valueInt); + IF (valueInt = 1) THEN + Opc_server_enabled := TRUE; + ELSE + Opc_server_enabled := FALSE; + END_IF; + + END_IF; + END_FUNCTION_BLOCK + +END_NAMESPACE \ No newline at end of file diff --git a/test/JsonParser/TestJsonParster.st b/test/JsonParser/TestJsonParster.st new file mode 100644 index 0000000..95da714 --- /dev/null +++ b/test/JsonParser/TestJsonParster.st @@ -0,0 +1,25 @@ +USING Simatic.Ax.Conversion; +USING Simatic.Ax.Json; +USING AxUnit.Assert; +USING System.Strings; + +NAMESPACE Simatic.Ax.Tiax + + {TestFixture} + CLASS TestJsonParserWrapper + VAR + JsonParserWrapper : JsonParser; + END_VAR + + {Test} + METHOD PUBLIC MyTestMethod + JsonParserWrapper.JsonAsString := '{"Name": "SIMATIC", "data": {"plc_type": 1518, "OPC_SERVER_ENABLED": 1}}'; + JsonParserWrapper(execute := TRUE); + ; // AxUnit.Assert.Equal(y, x) + Equal(expected := 'SIMATIC', actual := JsonParserWrapper.Name); + Equal(expected := 1518, actual := JsonParserWrapper.Plc_type); + Equal(expected := TRUE, actual := JsonParserWrapper.Opc_server_enabled); + END_METHOD + END_CLASS + +END_NAMESPACE